这是我的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
最佳答案
要观察数组中每个字典的isSelected
的变化,您将必须以数组中每个字典的观察者身份注册。正如我在my book中所说:
您可以使用NSArray的实例方法addObserver:toObjectsAtIndexes:forKeyPath:options:context:
高效地完成此操作,但是如果数组本身是可变的,则还必须使用随后添加到数组中的任何新字典来注册该键(并在删除字典时注销)从数组)。
最后一部分可能会令人生畏。在许多情况下,最好完全放弃,而只使用一个自定义类,该类在发生突变时会发出通知(而不是NSDictionary,而不是KVO)。
关于ios - 观察NSArray中NSDictionary的值变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21821093/