gpt4 book ai didi

ios - 删除观察者: forKeyPath is not working

转载 作者:行者123 更新时间:2023-12-03 16:52:49 25 4
gpt4 key购买 nike

我有一个 UIView 子类,它在 NSDictionary 中注册自身和一个带有对象的观察者。

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

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

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

如果有帮助:其他子类化事物和此 View 之间的唯一区别是其他事物是从 NIB 实例化的,而此 View 是在代码中内置的...

知道什么可能会阻止其正确删除吗?

最佳答案

您可能多次调用addObserver:forKey:context:。您必须精确平衡对 addObserver:...removeObserver:...

的调用

你在哪里调用addObserver:...?您知道 nib 加载的对象是如何实例化的吗?您可能希望将 addObserver:... 放入 awakeFromNibinitWithCoder: 中。我经常对可能或可能不是从 nib 文件创建的对象使用 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 - 删除观察者: forKeyPath is not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com