最近在项目中点击系统导航的返回按钮,程序总是莫名其妙的奔溃,直接跳转到main函数就不动了,控制台输出任何错误信息:
NSScanner: nil string argument
NSScanner: nil string argument
libc++abi.dylib: terminate_handler unexpectedly threw an exception
在模拟器上不闪退,在真机上时不时闪退。谷歌一搜,有人说这种情况大多是字符串操作异常,但是很难定位到底是在哪里出了问题。也有人说先把集成友盟的代码注掉就可以在控制台看到错误信息了。果断把友盟的代码注掉,结果果然输出了以下错误信息:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'An instance 0x1495b06e0 of class YLCountChooser was deallocated while key value observers were still registered with it. Current observation info: (
Context: 0x0, Property: 0x1492642f0>
)'
这下终于看出点眉目了,原来是我这里定义的一个YLCountChooser通过KVO监听了它的count属性,而在释放的时候没有移除其observer。找到问题就很好解决了,在代码中将其observer移除就正常了。
参考:
Terminate_handler Unexpectedly Threw an Exception无法显示崩溃原因和调用堆栈的分析及解决