KVO使用NSMutableArray

Dal*_*to1 3 objective-c

我的AppDelegate中有一个名为blocks的NSMutableArray属性.每当一个对象被添加到这个数组时我想观察.我读过其他帖子,但我不明白为什么这不起作用.

在我的app委托类中,我实现了

- (void)insertObject:(id)obj inBlocksAtIndex:(NSInteger)index
{
    [blocks insertObject:obj atIndex:index];
}
Run Code Online (Sandbox Code Playgroud)

在我的视图控制器的init方法中,我将一个观察者添加到我的AppDelegate引用中.

boardModel = [[UIApplication sharedApplication] delegate];
[boardModel addObserver:self forKeyPath:@"blocks" options:0 context:NULL];
Run Code Online (Sandbox Code Playgroud)

在我的视图控制器的viewDidLoad方法中,我尝试调用我之前实现的KVO索引数组访问器,

[boardModel insertObject:[[Block alloc] init] inBlocksAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

然后我实现我的observeValueForKeyPath方法:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"blocks"])
    {
        NSLog(@"ADDED");
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试在observeValueForKeyPath中的if语句之前添加一个NSLog语句,似乎它永远不会被调用.

我也尝试了NSLogging [[boardModel blocks] count],它说计数为1(正在添加对象).

我肯定错过了什么.

Pau*_*nch 12

问题是NSArrays不尊重KVO,因此观察关键路径计数将不起作用.

如果这是MacOSX,请使用NSArrayController.否则为数组创建一个包装类,在添加/删除数组内容时触发KVO调用,并传递所有其他调用.