我得到了这个异常“类MyClass被解除分配,而键值观察者仍然注册了它”,我想知道如何解决它?
我认为这是由以下代码引起的。 __block MyClass * aClass = [[MyClass alloc] init];
[aClass addObserver:observer
forKeyPath:@"aKey"
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
context:context];
我的问题是我没有看到dealloc中的位置,在MyClass获取dealloc之前我应该怎么做才能取消注册?
谢谢。
答案 0 :(得分:2)
您是否查看了方法addObserver:forKeyPath:options:context:
的文档?答案就在那里,在"讨论"部分。重要的部分:
...调用此方法的对象也必须调用 removeObserver:forKeyPath:或removeObserver:forKeyPath:context: 参与KVO的方法。
因此,如果您发布的代码位于init方法中,则需要在dealloc方法中添加对removeObserver:forKeyPath:
或removeObserver:forKeyPath:context:
的调用。