我有一个数据模型,主要由NSMutableArray'content'和NSMutableDictionary'contentByName'组成。我有ViewController对象,我希望观察数据模型中的变化。
我在模型上有一个属性“count”,它返回数组'contents'的大小,我可以使用willChange:和didChange:触发KVO更改观察。到现在为止还挺好。但是,视图控制器现在知道模型已更改,但不知道添加了什么。理想情况下,我需要将额外的信息放入传递给观察者的更改字典中。
这一切都可能吗?
答案 0 :(得分: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];
}
任何观察者也可以分别使用NSKeyValueObservingOptionNew
或NSKeyValueObservingOptionOld
来接收新值或旧值。