2011-06-24 184 views
0

我有一個對象觀察者,我只需要檢測一件事情。一旦我完成它,我想刪除它以消除開銷。在觀察事件後刪除觀察者

因此,這將是這個樣子:

-(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