我有一个ViewController
具有一个属性的类,该属性是我想要观察模型属性变化的模型。在我的模型对象中,我有一个在应用程序后台定期更新的属性。当它更新时,我需要在我的内部执行代码ViewController
.
为此,我从我的模型中创建了一个观察者ViewController
viewDidLoad
method.
[ModelObject addObserver:self
forKeyPath:@"State"
options:NSKeyValueObservingOptionNew
context:nil];
正如您所看到的,这没什么特别的,只要我将视图保留在屏幕上,观察方法就会正常运行。如果我从父视图中删除上述视图,我会得到一个EXC_BAD_ACCESS
当我的时出现错误消息ModelObject
实例Mode
属性变化。具体来说,我的应用程序在更新的行崩溃Mode
财产,我收到的大多是无用的EXC_BAD_ACCESS
在 ModelObject 实例中的以下代码行上。
//This is located in a method that periodically toggles the value of "State"
[self setState: 2];
我假设这个问题的解决方案是调用[ModelObject removeObserver: self forKeyPath:@"State"]
从我内心的某个地方ViewController
当它从其父子视图数组中删除时。但是,我已在我的代码中添加了该行代码viewDidUnload
方法,但我发现了viewDidUnload
方法未被调用。我不确定那是不是正确的地方,但它需要去某个地方。
我可能做错了什么?我知道问题与 KVO 相关,因为如果我删除观察,应用程序可以正常运行。我的模型实例可以根据需要切换该值,并且我的应用程序永远不会崩溃。当观察视图从其父视图的子视图数组中删除时,我应该怎么做才能确保我的观察者被正确删除?
我一般喜欢把addObserver:
and removeObserver:
in viewWillAppear:
and viewWillDisappear:
。我发现这些书挡比viewDidLoad
and viewDidUnload
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)