14

このメソッドからのパラメーターが何を返すのだろうと思っていました。

- (void) observeValueForKeyPath:(NSString *)keyPath
                       ofObject:(id)object
                         change:(NSDictionary *)change
                        context:(void *)context;

ドキュメントでは、それは言う

keyPath object を基準とした、変更された値へのキー パス。

objectキー パス keyPath のソース オブジェクト。

オブジェクトに関連するキー パス keyPath でプロパティの値に加えられた変更を記述するディクショナリ

contextレシーバーがキー値監視通知を受信するように登録されたときに提供された値。

ドキュメントが少しわかりにくいので、これらのパラメータについて説明していただけないでしょうか。

4

1 に答える 1

14

KVO 通知に登録したときに、 へのキーパスを指定しましたaddObserver:。keypath パラメータは、この値が返されるだけです。object パラメータは、addObserver:メッセージの送信先のオブジェクトです。これらは、異なるキーパス/オブジェクトの KVO 通知を区別するために使用できます (たとえば、複数の値を観察している場合)。

change値の変化の性質に関する情報を含むディクショナリです。新しい値または古い値が含まれる場合があります。対多の関係の場合は、変更されたインデックスが含まれる場合があります。その内容については、KVO プログラミング ガイドの「変更通知の受信」セクションで詳しく説明されています。

通知を登録するときに、コンテキスト値も指定できます。最後の値は、単純に返されたこの値です。コンテキスト固有の情報がない場合は、 nil を渡すのaddObserver:が適切です。

KVO システムのいくつかの欠点 (およびそれらに対処するためのヘルパー クラス) に関する適切な議論については、Mike Ash のすばらしいブログ投稿を参照してください。

于 2009-10-26T16:01:54.807 に答える