我已经查看了其他一些有关此问题的答案,我认为我正在正确实现我的代码,但我没有得到结果。
我有一个可变数组属性 - 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);
}
}
但观察者方法永远不会被调用。
答案 0 :(得分:0)
观察者永远不会被调用,因为当您更改数组的内容时,指向数组的指针保持不变。
您必须向数组本身添加一个观察者并观察数组的键。像count
这样的东西。但是你不能这样做因为NSMutableArray
不符合KVO。
所以,为了完成这项工作,你必须找到另一种方法。我的第一个想法是为NSMutableArray
创建一个包装类,每次向数组添加或删除项时都会触发通知。