我应该在哪里添加和删除UICollectionViewCell中的观察者?

时间:2016-01-27 11:27:59

标签: ios swift uicollectionview uicollectionviewcell key-value-observing

我对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放在任何地方。它产生了同样的错误。

我该怎么办?我应该把它放在哪里?

2 个答案:

答案 0 :(得分:0)

尝试从集合视图的委托方法中删除观察者: - collectionView:didEndDisplayingCell:forItemAtIndexPath:

答案 1 :(得分:0)

嘿Luda终于找到了解决这个问题的方法 您所要做的就是将 public CompositeCommand SlideOnOffCommand { get; set; } SlideOnOffCommand = new CompositeCommand(); SlideOnOffCommand.RegisterCommand(new DelegateCommand(SlideOnOff)); private void SlideOnOff() { } 子类化并使用协议委托给您的班级,这就是我的工作方式

AVPlayerItem

另请查看我的Question