ios - 观察NSArray中NSDictionary的值变化

标签 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,但是它不起作用。
carTypeNSArraycontext属性
- (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/

相关文章:

iphone - 使用 Tumblr 时出现 iOS oAuth 错误

ios - Swift segue 标识符始终为零,Storyboard ID 不起作用

ios - MFMailComposeView 崩溃

objective-c - 在 iOS 应用程序中嵌入 SoundCloud 播放器

objective-c - 如何在.plist中写入数据?

ios - UICollectionview 为空

android - 使用 Parse.Com 创建 SDK/API

ios - 如何将 UILocalNotification 设置为每月或每周按计划的同一时间运行?

ios - 对存储在 NSArray 中的键/值进行排序

ios - 在 iOS 中的字典中使用字典数组的 NSPredicate 进行过滤