Cocoaバインディング、というかメソッド名長いっての

Cocoaバインディングというか keyValue Observingは以前は

	[self setKeys:[NSArray arrayWithObjects:@"mode", @"arg1", @"arg2", nil]
		triggerChangeNotificationsForDependentKey:@"fire"];

のようなのを 例えば +initializeとかで呼び出して登録すれば Notifyが行く仕様だったんだけど、気がついたらdeprecatedになってる!わあ、いつの間に。全然気がついてなかった。
で、新しい方法は、っていうとこれまた長い keyPathsForValuesAffectingValueForKeyとやらをオーバーライドして、聞かれたKeyに対して、observeするkeyがあればNSSetで申告するらしい。

+ (NSSet *) keyPathsForValuesAffectingValueForKey: (NSString *) key
{
	NSSet keys = nil;

	NSLog(@"%@", key); //おためし
	if ([key isEqualToString:@"fire"]) {
		keys=[NSSet setWithObjects: @"mode", @"arg1", @"arg2", nil];
	}
	return keys;	
}

なんかかえって面倒になったようだけど*1、前のsetKeys:triggerChangeNotificationsForDependentKey:だと、どこで呼び出すべきかがちょっとびみやうだったのと、自由度が高くなるからこうしたのかな。外にリリースする訳でもないし前のまんまにしとこっかな・・・とかすると後々ハマるのかな。
ところで、上のコメントで「おためし」とある奴を出してみたんだけど、

2009-04-24 04:23:35.930 kepstrum[4784:10b] fire
2009-04-24 04:23:35.931 kepstrum[4784:10b] arg1
2009-04-24 04:23:35.932 kepstrum[4784:10b] arg1
2009-04-24 04:23:35.932 kepstrum[4784:10b] arg2
2009-04-24 04:23:35.933 kepstrum[4784:10b] arg2
2009-04-24 04:23:35.933 kepstrum[4784:10b] mode
2009-04-24 04:23:35.934 kepstrum[4784:10b] mode

? なんで2回なんだろう。nib上で参照された回数なのかな。よくわかんねや。なやもう。

追記:
2回でてる奴は keyPaths...が返したやつか。だからfireだけ1回なのね。

*1:本当は superの keyPaths...を呼び出して、それにAppendするべき。更に面倒