当前位置:  开发笔记 > 编程语言 > 正文

键值 - 观察Cocoa中的to-many关系

如何解决《键值-观察Cocoa中的to-many关系》经验,为你挑选了1个好方法。

我正在尝试使用键值观察来为NSMutableArray工作.下面是MyObservee的.h文件,观察到的类:

@interface MyObservee : NSObject {
    @private int someValue;
    @private NSMutableArray *someArray;
}

@property (readwrite,assign) int someValue;
- (NSMutableArray *)someArray;
@end

MyObserver类实现observeValueForKeyPath:ofObject:change:context:.这是我添加观察者的方式:

MyObservee *moe = [[MyObservee alloc] init];
MyObserver *mobs = [[MyObserver alloc] init];

[moe addObserver:mobs 
      forKeyPath:@"someArray" 
         options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) 
         context:NULL];

[moe.someArray addObject:@"hi there"];

为什么addObject:message不会作为someArray键路径的更改而触发?我觉得这里有一些我不完全理解的东西.



1> robottobor..:

您需要实现KVC编程指南中定义的索引数组访问器.然后,您必须使用这些访问器来访问阵列,KVO触发将起作用.您还可以调用-mutableArrayValueForKey:并将该数组用于addObject:等等,它将依次调用访问器方法,并且也会发生KVO触发.还有用于NSSets的设置访问器,请参见此处和此处.

例:

@interface MyClass : NSObject
{
    NSMutableArray *_orders;
}

@property(retain) NSMutableArray *orders;

- (NSUInteger)countOfOrders;
- (id)objectInOrdersAtIndex:(NSUInteger)index;
- (void)insertObject:(id)obj inOrdersAtIndex:(NSUInteger)index;
- (void)removeObjectFromOrdersAtIndex:(NSUInteger)index;
- (void)replaceObjectInOrdersAtIndex:(NSUInteger)index withObject:(id)obj;


@end


Jason Coco:是的,通常应该使用NSArrayController,但这不能解决如何改变基础模型并获取KVO通知的问题。
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有