hvo*_*mer 1 cocoa key-value-observing ios
我有一个UIView子类,它注册自己和一个观察者与一个对象NSDictionary.
删除此视图时(删除其包含视图时),我removeObserver:forKey在视图的dealloc方法中调用该方法.
该应用程序稍后会崩溃,因为我的视图对象实际上并未从观察者中删除.我通过字典的observationInfo证实了这一点.
我可以看到,当我期待时,我的dealloc确实在运行.这种方法与其他子类化的东西一样正常,比如UIButton和UILabel.  
如果它有帮助:其他子类化事物与此视图之间的唯一区别是其他事物是从NIB实例化的,其中此视图是用代码构建的......
知道什么可能阻止这种正确删除?
你可能会addObserver:forKey:context:多次打电话.你必须完全平衡对addObserver:...和的呼叫removeObserver:...
你在哪里打电话addObserver:...?你知道如何实例化nib加载的对象吗?你可能希望把addObserver:...中awakeFromNib和initWithCoder:.我经常使用一种setup方法来处理可能会或者可能不会从nib文件创建的对象.例如:
- (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;
}
| 归档时间: | 
 | 
| 查看次数: | 848 次 | 
| 最近记录: |