iOS:更新可变数组并使用KVO查看chaneg

时间:2015-11-03 18:18:21

标签: ios nsmutablearray key-value-observing

我已经查看了其他一些有关此问题的答案,我认为我正在正确实现我的代码,但我没有得到结果。

我有一个可变数组属性 - arrLocations。在我的.m文件中,在viewDidLoad中我为它设置了一个观察者,然后添加一个项目:

    self.arrLocations = [[NSMutableArray alloc] init];

    //add an observer to know when geocoding loops are updated
    [self addObserver:self forKeyPath:@"arrLocations" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];

    [self insertObject:@"test" inArrLocationsAtIndex:0];

然后我有KVO方法:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{

    if([keyPath isEqualToString:@"arrLocations"]) {

        NSLog(@"Showing contents of self.arrLocations\n%@", self.arrLocations);

    }

}

但观察者方法永远不会被调用。

1 个答案:

答案 0 :(得分:0)

观察者永远不会被调用,因为当您更改数组的内容时,指向数组的指针保持不变。

您必须向数组本身添加一个观察者并观察数组的键。像count这样的东西。但是你不能这样做因为NSMutableArray不符合KVO。

所以,为了完成这项工作,你必须找到另一种方法。我的第一个想法是为NSMutableArray创建一个包装类,每次向数组添加或删除项时都会触发通知。