ios - 在 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
有人遇到过类似的问题吗?
解决方案
在添加观察者之前,请确保您删除了添加的观察者。
同样,创建两个函数来添加和删除观察者,如
添加观察者
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()
快乐编码!
推荐阅读
- python - Python:在单个日志文件中捕获每个线程的详细信息
- google-apps-script - 电子表格 openById 如何遍历所有行?
- ios - WKWebView App 因崩溃被苹果拒绝
- amazon-web-services - DynamoDB 免费层读/写容量费用
- javascript - 使用 Glide.js 获取当前幻灯片索引
- python - 如果文件夹存在,为什么shutil move不起作用
- grafana - 如何使用grafana中的变量作为单位?
- string - 如何使用 Join 函数从结构列表中序列化特定的字符串属性?
- ios - 将两个 NSarray 转换为 NSString
- javascript - 任何人都可以解释语法