我对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放在任何地方。它产生了同样的错误。
我该怎么办?我应该把它放在哪里?
答案 0 :(得分:0)
尝试从集合视图的委托方法中删除观察者: - collectionView:didEndDisplayingCell:forItemAtIndexPath:
答案 1 :(得分:0)
public CompositeCommand SlideOnOffCommand { get; set; }
SlideOnOffCommand = new CompositeCommand();
SlideOnOffCommand.RegisterCommand(new DelegateCommand(SlideOnOff));
private void SlideOnOff()
{
}
子类化并使用协议委托给您的班级,这就是我的工作方式
AVPlayerItem
另请查看我的Question