2011年4月27日水曜日

キー値監視について

監視元1に対して監視先オブジェクトを複数作れる通知方法。
キーに関連づける値は一個じゃなくてもいいので依存度があまり高くない。
呼び出しメソッドの第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"];
}