数日後に自分の問題の解決策が見つかったようですが、何かが足りなかったことがわかりました。
NSKeyValueObserving Protocol Referenceのメソッドの説明を読み直した後keysPathsForValuesAffectingValueForKey:
、次の文の意味に気づきました。
キーのオブザーバーが受信クラスのインスタンスに登録されると、Key-Valueオブザーバー自体が同じインスタンスのすべてのキーパスを自動的に監視し、キーの変更通知をオブザーバーに送信します。キーパスが変更されます。
つまり、インスタンスには、属性の変更を監視するオブザーバーが必要です<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
関連する変更通知に作用するように属性キーパスを実装します。つまり、属性値を更新します。