我有一个UIView
子类,该子类注册自己,并使用NSDictionary
中的对象注册一个观察者。
删除此视图时(删除其包含的视图时),我在视图的dealloc方法中调用removeObserver:forKey
方法。
该应用程序稍后将崩溃,因为实际上并未从观察者中删除我的视图对象。我已经通过字典的observationInfo确认了这一点。
我可以看到,我的dealloc确实正在运行。同样的方法可以很好地处理其他子类事物,例如UIButton
和UILabel
。
如果有帮助,则其他子类事物与该视图之间的唯一区别是,其他事物是从NIB实例化的,该视图是在代码中内置的...
知道什么可能阻止此操作正确删除吗?
最佳答案
您可能多次调用addObserver:forKey:context:
。您必须完全平衡对addObserver:...
和removeObserver:...
的调用
您在哪里打电话给addObserver:...
?您知道如何实例化笔尖加载的对象吗?您可能希望将addObserver:...
放入awakeFromNib
或initWithCoder:
中。我经常使用setup
方法处理可能会或可能不会从笔尖文件创建的对象。例如:
- (void)setup {
// Do setup work here
}
- (id)initWithFrame:(CGRect)frame {
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
if (self) {
[self setup];
}
return self;
}
关于ios - removeObserver:forKeyPath不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9713224/