Objective-CのKVO(キー値監視)の使い方 2013年11月27日 Objective-C(というかCocoa, Mac, iOS)のキー値監視(KVO, Key-Value Observing)の簡単な使い方です。 NSMutableDictionaryの特定のキーの値に変化があった時に通知する場合を考えます。 key1とkey2で構成されるdictionaryを作り、key1をaddObserver:self forKeyPath:@"key1"で監視対象に設定します。 通知のオプションは二つあり、 NSKeyValueObservingOptionNewは変更後の値を、 NSKeyValueObservingOptionOldは変更前の値を通知するオプションです。 1 2 NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:@{@"key1":@"This is key1.", @"key2":@"This is key2."}]; [dict addObserver:self forKeyPath:@"key1" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil]; key1の値を変更してみます。 1 [dict setObject:@"Hello!" forKey:@"key1"]; すると、次のメソッドが呼ばれます。 1 2 3 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"%@", [change description]); } 出力されるログは以下の通り。 1 2 3 4 5 { kind = 1; new = "Hello!"; old = "This is key1."; } 不要になったら通知の解除を忘れずに。 1 [dict removeObserver:self forKeyPath:@"key1"]; 簡単ですね。