インスタンスが別のオブジェクトによって監視されているサブクラスの場合:このインスタンスが変更されたことをオブザーバーに通知するにはどうすればよいですか?
私がやろうとしているのは、NSManagedObject(コントローラーが管理する)のプロパティが変更されたときにNSArrayControllerが通知を受け取るようにすることです。コントローラはNSManagedObjectが変更されたと見なす必要がありますが、実際にはそのプロパティの1つが変更されました。
インスタンスが別のオブジェクトによって監視されているサブクラスの場合:このインスタンスが変更されたことをオブザーバーに通知するにはどうすればよいですか?
私がやろうとしているのは、NSManagedObject(コントローラーが管理する)のプロパティが変更されたときにNSArrayControllerが通知を受け取るようにすることです。コントローラはNSManagedObjectが変更されたと見なす必要がありますが、実際にはそのプロパティの1つが変更されました。
管理対象オブジェクトのプロパティを設定するときは、プロパティのアクセサメソッドの1つ(myObject.foo = bar
または[myObject setFoo:bar]
)を使用するか、KVC([myObject setValue:bar forKey:@"foo"]
)を使用します。後者は、プレーンなNSManagedObjectの唯一の方法です。前者を実行できることは、NSManagedObjectをサブクラス化する利点の1つです。
KVO通知を自分で投稿することもできますが、これはインスタンス変数にsetPrimitiveValue:forKey:
直接割り当てる(またはを使用する)場合にのみ必要です。これは、いくつかの場合を除いて行うべきではありません。
init
メソッド内。まだオブザーバーがいないはずなので、KVO通知の投稿について心配する必要はありません。dealloc
。オブザーバーはもう存在しないはずなので、KVO通知の投稿について心配する必要はありません。(この時点でまだオブザーバーがいる場合は、コードのバグです。)sPV:fK:
)カスタムアクセサで。KVOが自動的に行うため、カスタムアクセサーから独自のKVO通知を投稿する必要はありません。また、依存関係を設定できるため、他のプロパティのKVO通知を投稿する必要もありません。(私はCore Dataに触れたことがないので、Core Dataの専門家が私の答えを詳しく調べて、何か間違ったことや取り残されていないことを確認していただければ幸いです。)