这是我的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,但它不起作用。
carType
是NSArray
context
属性
- (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
答案 0 :(得分:3)
要观察数组中每个字典的isSelected
更改,您必须使用数组中的每个字典注册为观察者 。正如我在my book中所说的那样:
您可以使用NSArray的实例方法
addObserver:toObjectsAtIndexes:forKeyPath:options:context:
高效地执行此操作,但如果数组本身是可变的,那么您还必须使用随后添加到数组中的任何新词典注册该键(从数组中删除字典时取消注册。
最后一部分真的令人生畏。在许多情况下,最好完全放弃,只使用一个自定义类,它在发生变异时发出通知(而不是NSDictionary,而不是KVO)。