Mar*_*tin 3 key-value-observing ios swift swift2
我有一个视频应用程序,我在Swift 1中建立了一段时间,我一直在尝试迁移到Swift 2.2.这一切(最终)与观察者的奇怪崩溃不同.
func removeObservers()
{
print("REMOVING OBSERVERS")
if ( !self.is_image && self.player != nil ) {
if (self.player?.observationInfo != nil) {
self.player?.removeObserver(self, forKeyPath: "currentItem.status")
self.player?.removeObserver(self, forKeyPath: "readyForDisplay")
}
}
NSNotificationCenter.defaultCenter().removeObserver(self)
}
Run Code Online (Sandbox Code Playgroud)
这在以前使用SwiftTryCatch工作,但是就地线崩溃了"'无法删除关键路径"readyForDisplay"的观察者,因为它没有被注册为观察者.'"或者,如果观察者在已解除分配的对象上注册了我发表评论.
如果我向它添加一个do {} catch {},我会得到一个错误,"这不会抛出",它只会崩溃.我如何将其置于某种形式的try-catch格式中?
在Swift 2中,libs对于真正意外发生的错误(抛出)与程序员可能阻止的错误(不抛出,但只是使应用程序崩溃)非常严格.
(我不是这种区别的粉丝,或者至少不是Apple所做出的关于哪些错误属于哪个类别的具体决定.JSON API对这个部门的荒谬认真.但是......我们使用API我们'得到了.)
该NSKeyValueObserving文件说:
removeObserver:forKeyPath:如果对象尚未注册为观察者,则调用是错误的.
"这是一个错误"是Apple的代码,"你有责任从不这样做,如果你这样做,你的应用程序将以无法捕获的方式崩溃."
在这些情况下,通常会进行API调用以检查您即将执行的操作的有效性.但是,在AFAIK中,没有KVO API调用你可以问,"X是否观察到对象Z的关键路径Y?"这意味着你有三个选择:
| 归档时间: |
|
| 查看次数: |
2425 次 |
| 最近记录: |