2011-06-24 10 views
0

私はオブザーバーを1つだけ検出する必要があります。私はそれを済ませたら、それを取り除いてオーバーヘッドを取り除きたいと思います。観察されたイベントの後のオブザーバーの削除

だから、それは次のようになります。

-(void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*) change context:(void*)context{ 
    if ([keyPath isEqual:@"doingSomething"]){ 
     if ([object isDoingSomething] == NO) { 
        [my_object setDoingSomething: DO_NOTHING_FOREVER]; 
        [my_object removeObserver:self forKeyPath:@"doingSomething"] // <= ERROR eventually 
       } 
     } 
} 

をこれはしかし、仕事などのエラースローしません:

NSKVOPendingNotificationRelease “EXC_BAD_ACCESS”

答えて

1

はあなたがobjectにオブザーバを削除呼び出すしてはいけません?

[object removeObserver:self forKeyPath:@"doingSomething"]; 

removeObserver:forKeyPath:受信側でメソッドを呼び出す必要があります。

+0

これはうまくいくようです。 – Dex

関連する問題