在韩国国际志愿者组织在IOS删除观察问题(Remove Observer issue in KVO

2019-09-23 00:52发布

我有一个充满对象的数组,其中我观察,当我删除所有的对象,我删除了观测表,但问题是,当我删除阵列中的所有对象,然后再开始添加它该阵列我得到removeObserver问题。

我有很强的借鉴到我的对象

我加入观察家这样

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

而我删除它这样

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

并且当我使用删除方法删除表中的对象

我尝试设置使用NSKVODeallocateBreak断点,我观察到的是,它停止该线@sythesize object = m_object; 我不明白这是什么意思所以,朋友们请帮我

问候兰吉特

Answer 1:

删除对象之前,必须先取出观察。 派则验证没有观察家 - 这样做,有一些调试信息,您可以发送,它可以让你记录当前观察员对象之后。 然后你就可以安全地释放对象。

编辑:如果你所观察的对象,你可以在它的dealloced添加日志 - 它有更好的报告中没有观察员。 因此,添加到您的观察对象的dealloc:

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

在你的控制器,你释放被观察的对象(我假设是从阵列中取出完成)之前,使用此日志:

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

如果你发现你正在释放一个对象,你还在观察,这是一个问题。 如果对象是越来越dealloced其仍然被观察到,这是一个问题了。

编辑:在您如果已经存在或不是对象添加到数组,测试。 如果没有,那么观察它。 如果是,那么你知道你已经是观察它。



文章来源: Remove Observer issue in KVO in ios