首页 > 解决方案 > 在 UICollectionViewCell 中添加观察者。获取异常 KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED

问题描述

我正在添加一个UICollectionViewCell具有 AVPlayer 的观察者来获取播放项目的持续时间。

addObserver(self, forKeyPath: #keyPath(player.currentItem.duration), options: [.new, .initial], context: &playerViewControllerKVOContext)

在 deinit 方法中移除观察者。

removeObserver(self, forKeyPath: #keyPath(player.currentItem.duration), context: &playerViewControllerKVOContext)

随机获取异常说

KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED

有人遇到过类似的问题吗?

标签: iosswiftuicollectionviewcellavplayer

解决方案


在添加观察者之前,请确保您删除了添加的观察者。

同样,创建两个函数来添加和删除观察者,如

添加观察者

func addObserver() { 
   addObserver(self, forKeyPath: #keyPath(player.currentItem.duration), options: [.new, .initial], context: &playerViewControllerKVOContext)

}

移除观察者

func removeObservers() {
     removeObserver(self, forKeyPath: #keyPath(player.currentItem.duration), context: &playerViewControllerKVOContext)

}

确保在调用 addObserver() 之前调用 removeObserver()

快乐编码!


推荐阅读