观察NSArray中NSDictionary的值变化

时间:2014-02-17 04:58:49

标签: ios objective-c nsarray nsdictionary key-value-observing

这是我的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,但它不起作用。

carTypeNSArray

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

1 个答案:

答案 0 :(得分:3)

要观察数组中每个字典的isSelected更改,您必须使用数组中的每个字典注册为观察者 。正如我在my book中所说的那样:

  

您可以使用NSArray的实例方法addObserver:toObjectsAtIndexes:forKeyPath:options:context:高效地执行此操作,但如果数组本身是可变的,那么您还必须使用随后添加到数组中的任何新词典注册该键(从数组中删除字典时取消注册。

最后一部分真的令人生畏。在许多情况下,最好完全放弃,只使用一个自定义类,它在发生变异时发出通知(而不是NSDictionary,而不是KVO)。