iPhoneのプロパティ値の変更に関するカスタムイベント

プロパティ値の変更にカスタムイベントを追加することは可能ですか?プロパティの値が変更されたときにイベントをトリガする必要があります。

2
KVO(キー値観測)を使用するか、またはセッターに独自のメソッドを定義してカスタムイベントを書き込むことができますか?一般に、KVOはプロパティ値の変更を観察するために使用されます。
追加された 著者 Ravin,
追加された 著者 Ravin,
追加された 著者 Ravin,
私はカスタムセッターについて知っています。しかし、どのようにKVOを実装することができますか?
追加された 著者 Sanal MS,

3 答え

私はあなたが別のオブジェクト( "観察")でプロパティが変化したときに、オブジェクト(「オブザーバ」と呼ばれる)のイベントをトリガしたいと仮定します。

あなたは2つの方法でこれを行うことができます:

  1. 通知センターを使用すると、NSNotificationCenterの「postNotification:」メソッドのいずれかを使用して通知をポストすることで設定者を無効にすることができ、関心のあるすべてのオブザーバに通知が届きます。 >

  2. KVO(Key-Value Observing)を使用して、オブザーバをプロパティを持つインスタンスに明示的に登録する必要があります。例えば自己が "instanceToObserve"プロパティ "myProperty"に登録したい場合:


[instanceToObserve addObserver:self forKeyPath:@"myProperty" option:NSKeyValueObservingOptionNew context:NULL];

次に "self"のクラスで "observation"関数を実装します。


- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {
// your implementation goes here
}

2つのものはあなた次第です。あなたが基本的なココアの規則に従えば、KVOが自動的にサポートされるので、特別な努力は必要なく、合成されたセッターに変更を加える必要はないと考えてください。

3
追加された

確かに。例えば

.hファイル

NSString * myString

.mファイル

- (NSString *)myString {
    //Custom event
    return myString;
}

これにより、self.myStringとして使用できるmyStringプロパティが作成されます。

0
追加された
ごめんなさい。私はセッターのカスタム実装を意味しません。 setterメソッドが呼び出されたときに別のカスタムイベントをトリガする必要があります。 setterメソッドを変更せずに
追加された 著者 Sanal MS,
マナリの提案が働くことができます、あなたはセッターを再実装することができ、セッター内にメッセージ([NSNotificationCenter defaultCenter] postNotificationName)を追加します。
追加された 著者 alinoz,

KVO(キー値観測)を使用するか、またはセッターに独自のメソッドを定義し、カスタムイベントを書き込むことができますか?一般に、KVOはプロパティ値の変更を観察するために使用されます。

https://stackoverflow.com/questions/4813331/understanding-kvo-in-ios

http://nachbaur.com/blog/back-to-basics-using- kvo

http://developer.apple.com /library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html

0
追加された