在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]);
如果你发现你正在发布一个你仍在观察的物体,那就是一个问题。 如果一个对象被解除分配并且仍然被观察到这也是一个问题。
编辑:在将对象添加到数组之前,请测试它是否已存在。 如果没有,那就观察吧。 如果是,那么你知道你已经在观察它了。