类myClass的实例0xa9923e0被释放,而键值观察者仍然注册了它

时间:2014-08-14 15:08:08

标签: ios objective-c xcode observers

我有一个使用观察者的类。 代码添加在awakeFromNib

[self.contactSearchView addObserver:self forKeyPath:@"selectedContactUUID" options:0 context:nil];
self.contactSearchView.contactSelected = self.attendeeSelected;

关于dealloc 执行以下代码:

[self.contactSearchView removeObserver:self forKeyPath:@"selectedContactUUID"];
[[NSNotificationCenter defaultCenter] removeObserver:self];

但是,如果我多次关闭打开该特定视图,最终会生成以下异常并且应用程序崩溃。

类MyClass的实例0xa9923e0已取消分配,而键值观察者仍在其中注册。观察信息被泄露,甚至可能被错误地附加到其他物体上。在NSKVODeallocateBreak上设置断点以在调试器中停止。这是目前的观察信息:

在应用程序崩溃之后不久,我不确定如何继续前进。

2 个答案:

答案 0 :(得分:1)

如果self将自己作为观察者添加到另一个对象,那么它必须将自己作为观察者移除。最近,你可以用自己的dealloc方法做到这一点。

答案 1 :(得分:0)

删除观察者: [timer removeObserver:self forKeyPath:@" timeText"];