【发布时间】:2018-05-17 10:05:42
【问题描述】:
我正在使用新的 Swift 4 API,并且我以不确定的方式获得了 KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED。有人能够修复它吗?代码非常简单,创建一个 KVO 并将其存储在一个局部变量中。
private var rateObservation: NSKeyValueObservation?
rateObservation = player.observe(\AVQueuePlayer.rate, options: [.initial, .new]) { (_, change) in
observer(change.newValue)
}
【问题讨论】:
-
我相信你必须在 main 线程上观察。见:docs。完成后还需要注销观察者。
-
还要注意
rateObservation必须是可选的! -
rateObservation是类的实例属性吗?如果它仅在viewDidLoad之类的方法中定义,它将在函数完成执行后停止观察。 -
我展示了我是如何声明它的。请看一看。
-
@PranavKasetti 的建议是我要开始的地方。将
observe()调用移到DispatchQueue.main.async {}块内,看看它是否消失。
标签: ios swift swift4 key-value-observing