キーに関連づける値は一個じゃなくてもいいので依存度があまり高くない。
呼び出しメソッドの第2引数には監視先オブジェクトが入る。
第3、4は…よくわかってないです。
登録の解除は忘れずに。
/*---------監視するクラス---------*/
//ViewControllerの場合はwillAppearその他はinitでキー監視の宣言
-(void)viewWillAppear:(BOOL)animated{
KansiClass * kansi = [[KansiClass alloc] init];
//キー値監視登録
[kansi addObserver:self forKeyPath:@"keyPath"
options:0 context:NULL];
}
//監視キーに変更があった場合に呼び出される
-(void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object
change:(NSDictionary*)change
context:(void*)context{
if([keyPath isEqualToString:@"keyPath"]){
//値変更したらこのクラスでやりたいことを記述
}
}
-(void)dealloc{
//登録の解除
[kansi removeObserver:self forKeyPath:@"keyPath"];
[kansi release];
[super dealloc];
}
/*---------監視されるクラス内---------*/
-(void)changeKansi{
[self willChangeValueForKey:@"keyPath"];
//監視値の変更
kansiValue = FALSE;
[self didChangeValueForKey:@"keyPath"];
}