-
Notifications
You must be signed in to change notification settings - Fork 336
7.3 Key Value Observing
Introduction to Key-Value Observing Programming Guide
NSKeyValueObserving Protocol Reference
2オブジェクト間で、一方のオブジェクトでイベントが発生したときにもう一方のオブジェクトにメッセージを送る方法は大きく分けて三つあります。
パターン | 特徴 |
---|---|
delegate パターン (1.4 参照) | あるオブジェクトの処理を他のオブジェクトに委譲。一対一の関係 |
Key Value Observing | あるオブジェクトのプロパティの値を監視を登録し、そのプロパティの値に変化があった場合に通知を監視登録したオブジェクトは通知を受け取ることができる。 |
NSNotification、NSNotificationCenter を用いた通知 | NSNotificationCenter という仲介オブジェクトを介して、あるオブジェクトから通知登録しているあらゆるオブジェクトに通知することができる |
この章では KVO について解説します。下図は KVO の略図です。
KVO を実現するためには以下のステップが必要です
- 監視したいオブジェクトのキー値に対して監視登録をおこなう
- 監視対象に変化が起きたときの通知ハンドラーの実装
- 監視登録の解除
まず監視したい counter object を監視登録してみましょう。
[_counter addObserver:self // [1] 監視者
forKeyPath:@"count" // [2] 監視対象のキー値
options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) // [3] オプションの指定
context:nil]; //[4] 任意のオブジェクトを指定
監視するオブジェクトを指定します。指定したオブジェクトに変化通知が届きます。
監視したいオブジェクトのどのプロパティの変化を監視するかを指定します。
オプションを指定することで通知の際に取得できる値が変わってきます。 NSKeyValueObservingOptions
任意のオブジェクトを指定することで、通知を受け取ったときにそのオブジェクトにアクセスすることができます。
observer になったオブジェクトは、監視対象に変化があった場合このメソッドが呼び出されます。
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
NSLog(@"%@", change);
}
例えば、監視対象の count の値がインクリメントされた場合以下のようなログがはかれます。
console log
MixiKVOSample[52446:c07] {
kind = 1;
new = 1;
old = 0;
}
例えば、監視者オブジェクトが破棄された時など監視する必要がなくなった場合は監視解除を行う必要があります。
-(void)dealloc
{
[_counter removeObserver:self forKeyPath:@"count"];
}
下図の仕様を満たすように KVO を用いて実装してください。
はじめに
-
導入
-
1.3 UIViewController1 UIViewController のカスタマイズ(xib, autoresizing)
-
UIKit 1 - container, rotate-
-
UIKit 2- UIView -
-
UIKit 3 - table view -
-
UIKit 4 - image and text -
-
ネットワーク処理
-
ローカルキャッシュと通知
-
Blocks, GCD
-
設計とデザインパターン
-
開発ツール
-
テスト
-
In-App Purchase
-
付録