如何修复异常“类MyClass被解除分配,而键值观察者仍然在其中注册”

时间:2014-12-08 19:23:41

标签: ios objective-c

我得到了这个异常“类MyClass被解除分配,而键值观察者仍然注册了它”,我想知道如何解决它?

我认为这是由以下代码引起的。       __block MyClass * aClass = [[MyClass alloc] init];

  [aClass addObserver:observer
         forKeyPath:@"aKey"
         options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
         context:context];

我的问题是我没有看到dealloc中的位置,在MyClass获取dealloc之前我应该​​怎么做才能取消注册?

谢谢。

1 个答案:

答案 0 :(得分:2)

您是否查看了方法addObserver:forKeyPath:options:context:的文档?答案就在那里,在"讨论"部分。重要的部分:

  

...调用此方法的对象也必须调用   removeObserver:forKeyPath:或removeObserver:forKeyPath:context:   参与KVO的方法。

因此,如果您发布的代码位于init方法中,则需要在dealloc方法中添加对removeObserver:forKeyPath:removeObserver:forKeyPath:context:的调用。