它看起來像幾天後發現了我自己的問題的解決方案,結果我失去了一些東西。
在NSKeyValueObserving Protocol Reference重讀方法keysPathsForValuesAffectingValueForKey:
的討論後,我意識到下面的句子的含義:
當用於鍵觀察者與接收類的實例註冊,鍵 - 值觀察自己會自動觀察同一實例的所有關鍵路徑,並在任何關鍵路徑的值發生更改時將關鍵字的更改通知發送給觀察者。
總之,你的情況應該有一個觀察者觀察更改的屬性<key>
:
[myInstance addObserver:myObserver forKeyPath:attributeKey options:nil context:nil];
只要你註冊一個觀察者,該協議將調用keysPathsForValuesAffectingValueForKey
您的特定屬性鍵。如果此方法返回一組非空的鍵路徑,則除了通知您對屬性進行任何直接更改之外,如果對這些鍵路徑中的任何一個進行了更改,KVO將爲您的屬性發出更改通知。
關係鍵會自動調用,因爲Core Data已經使用觀察者來保持反向關係是最新的。
在你想有一個屬性依賴於同一個實體中的另一個屬性或關係在特定情況下,你必須:
- 添加在awakeFromInsert觀察員:方法使用
addObserver:forKeyPath:options:context:
- 實施
keyPathsForValuesAffectingValueForKey:
或keyPathsForValuesAffecting<key>
- 實施
observeValueForKeyPath:ofObject:change:context
您的屬性鍵路徑作用於相關的更改通知,即更新您的屬性值。
不錯的偵探工作!你介意發佈一些示例代碼?我的頭腦比理解代碼更容易理解代碼。 – 2013-10-10 05:20:37