【发布时间】:2016-01-27 11:27:58
【问题描述】:
在我对 UICollectionViewCell 生命周期的理解中,我缺少一些东西。
创建和配置 UICollectionViewCell 后,我在其属性之一上添加观察者
func setCellDetails(someDetails:SomeObject)
{
...
self.someProperty.addObserver(self, forKeyPath: "objectProperty", options: .New, context: nil)
...
}
我删除了prepareForReuse上的观察者
override func prepareForReuse()
{
super.prepareForReuse()
self.someProperty.removeObserver(self, forKeyPath: "objectProperty")
}
但是当我在应用程序的选项卡之间跳转并影响objectProperty 时,单元格不会受到影响。
我调试了代码,发现当我更改选项卡时,调用了单元格的 prepareForReuse ,因此删除了观察者,并且由于未调用单元格设置函数,因此它从未添加回来。那么也许我应该在其他功能中添加或删除观察者?
我尝试将removeObserver 放入deinit 并崩溃并出现以下错误:
由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'一个实例 0x12eb89dd0 ObservedObject 类的对象被释放,而键值观察者被释放 仍然注册它。当前观察信息: NSKeyValueObservationInfo NSKeyValueObservance 观察者:..关键路径:objectProperty
我想也许不要把 removeObserver 放在任何地方。它产生了同样的错误。
我该怎么办?我应该把它放在哪里?
【问题讨论】:
-
你想完成什么?通常,您不应该在作为视图的类中对数据进行任何更改。代表通常是去这里的方式。
-
嘿,Luda 确实知道在哪里移除观察者了吗?我真的需要知道
-
@Panda,我暂时离开了它。如果您能找到答案,请不要犹豫与我分享 :)
标签: ios swift uicollectionview uicollectionviewcell key-value-observing