2010-09-17 33 views
0

我有一个数据模型,主要由一个NSMutableArray'contents'和NSMutableDictionary'contentsByName'组成。我有ViewController对象,我希望观察数据模型中的更改。手动触发KVO事件时,修改字典是否可以修改?

我在模型上有一个属性“count”,返回数组'contents'的大小,我可以使用willChange:和didChange:来触发KVO变化观察。到现在为止还挺好。然而,视图控制器现在意识到模型已经改变,但不知道已经添加了什么。理想情况下,我需要将额外的信息放入交付给观察者的变更字典中。

这是可能的吗?

回答

2

这很容易通过更加细化地更新模型对象来解决;但是,内置集合在修改内容时不会生成KVO通知,并且需要一些手动支持。

如果要生成有关对阵列进行更改的通知,请在每次修改时使用willChange:valuesAtIndexes:forKey:didChange:valuesAtIndexes:forKey:。使用这些方法时,更改字典将包含NSKeyValueChangeIndexesKey的条目,该条目反映了插入,删除或替换的索引。

如果你想生成有关更改字典通知,您可以拨打willChangeValueForKey:didChangeValueForKey:在字典本身,就像这样:

- (void)addContent:(id)content { 
    NSString *key = [content name]; 

    [self.contentsByName willChangeValueForKey:key]; 
    [self.contentsByName setValue:content forKey:key]; 
    [self.contentsByName didChangeValueForKey:key]; 
} 

任何观察员也可以使用NSKeyValueObservingOptionNewNSKeyValueObservingOptionOld接收新的或旧值,分别。