2010-09-17 32 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接收新的或舊值,分別。