观察NSArray中NSDictionary的值更改

这是我的NSArray

 carType ( { isSelected = 0; kFieldName = "All types"; kObjectValue = 0; kObjectValueText = All; }, { isSelected = 0; kFieldName = "4 seats"; kObjectValue = 4; kObjectValueText = "4 seats"; }, { isSelected = 1; kFieldName = "7 seats"; kObjectValue = 7; kObjectValueText = "7 seats"; } ) 

我如何观察isSelected字段的变化? 我在我的代码中使用了KVO,但它不起作用。

carTypecontextNSArray属性

 - (void)viewDidLoad { [super viewDidLoad]; [context addObserver:self forKeyPath:@"carType" options:NSKeyValueObservingOptionNew context:NULL]; } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"carType"]) { NSLog(@"carType changed"); } } //dealloc remove observer 

要观察数组中每个字典的isSelected变化,您必须注册为数组中每个字典的观察者。 正如我在书中所说:

你可以用NSArray的实例方法addObserver:toObjectsAtIndexes:forKeyPath:options:context:来有效地做到这一点,但是如果数组本身是可变的,那么你也将不得不注册该密钥,随后添加到新的字典数组(并从数组中删除字典时取消注册)。

最后一部分会变得非常艰巨。 在许多情况下,最好放弃完全,只是使用自定义类,当它发生变化时发出通知(而不是NSDictionary,而不是KVO)。