在ios中删除KVO中的观察者问题

我有一个表填充了一个对象数组,我正在观察,当我删除所有对象时,我删除了观察者,但问题是,当我删除数组中的所有对象,然后再次开始添加它到数组我得到removeObserver问题。

我强烈提到了我的目标

我这样添加Observer

[self.object addObserver:self forKeyPath:kTaskCompletedKey options:NSKeyValueObservingOptionNew context:&kTaskObservationContext]; 

而我正在这样删除它

 - (void)dealloc; { [self.object removeObserver:self forKeyPath:kTaskCompletedKey context:&kTaskObservationContext]; } 

当我使用delete方法删除表中的对象时

我尝试使用NSKVODeallocateBreak设置断点,我观察到它停止了@sythesize object = m_object; 而且我不明白这意味着什么所以,朋友们请帮助我

关心Ranjit

您必须在删除对象之前删除观察。 在执行此操作之后,您可以发送一些调试消息,让您可以记录当前观察者的对象 – 发送它然后validation没有观察者。 然后,您可以安全地释放对象。

编辑:如果您正在观察的对象,您可以在其解除分配中添加日志 – 它最好报告没有观察者。 所以,将它添加到被观察对象的dealloc中:

 NSLog(@"Dealloc of %@ with observationInfo: %@", self, [self observationInfo]); 

在您的控制器中,就在释放观察对象之前(我假设是通过从arrays中删除它来完成的),使用此日志:

 id foo = [myArray objectAtIndex:whatever]; NSLog(@"Release %@ with observationInfo: %@", foo, [foo observationInfo]); 

如果你发现你正在发布一个你仍在观察的物体,那就是一个问题。 如果一个对象被解除分配并且仍然被观察到这也是一个问题。

编辑:在将对象添加到数组之前,请测试它是否已存在。 如果没有,那就观察吧。 如果是,那么你知道你已经在观察它了。