我有一个UIView子类,该子类注册自己,并使用NSDictionary中的对象注册一个观察者。

删除此视图时(删除其包含的视图时),我在视图的dealloc方法中调用removeObserver:forKey方法。

该应用程序稍后将崩溃,因为实际上并未从观察者中删除我的视图对象。我已经通过字典的observationInfo确认了这一点。

我可以看到,我的dealloc确实正在运行。同样的方法可以很好地处理其他子类事物,例如UIButtonUILabel

如果有帮助,则其他子类事物与该视图之间的唯一区别是,其他事物是从NIB实例化的,该视图是在代码中内置的...

知道什么可能阻止此操作正确删除吗?

最佳答案

您可能多次调用addObserver:forKey:context:。您必须完全平衡对addObserver:...removeObserver:...的调用

您在哪里打电话给addObserver:...?您知道如何实例化笔尖加载的对象吗?您可能希望将addObserver:...放入awakeFromNibinitWithCoder:中。我经常使用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/

10-09 01:50