我的应用程序的第一个控制器有一个avplayer,所以我实现了在viewWillAppear上设置并在viewDidDisappear上删除的观察者。
navigationVC.viewControllers = newNavigationVC.viewControllers
当我收到深层链接时,我创建了一个新的导航堆栈,然后我用新的导航控制器堆栈替换当前的导航控制器堆栈:
libc++abi.dylib: terminating with uncaught exception of type NSException
而不是正确加载新控制器(如果我删除了观察者的代码,这种情况正常发生),应用程序崩溃了:
[surename], [name] [secondname]. [extra]
我不知道发生了什么,因为xcode没有给我任何指示,并且跟踪是在汇编中所以它也没有帮助。
有人能指出我正确的调试方向吗?
答案 0 :(得分:0)
对于那些感兴趣的人,我用这个解决方案调试了这个:
推出
NSSetUncaughtExceptionHandler { exception in
print(exception)
print(exception.callStackSymbols)
}
这给了我一条包含以下内容的痕迹:
AVPlayerItem类的实例0x17000d9d0已取消分配,而键值观察者仍在其中注册。
在移除中有一个失踪的观察者,将:
self.avQueuePlayer.currentItem?.removeObserver(self, forKeyPath: "status")
解决了我的问题。
答案 1 :(得分:0)
通常情况下,立即删除所有观察者会更有意义。
NotificationCenter.default.removeObserver(self)