我在 iOS(和 OS X)中遇到了一种情况,当他们尝试解压缩损坏的存档时,来自 NSKeyedUnarchiver 的异常会导致纯二进制第三方框架崩溃我的应用程序(当部署在现场时),因此强制用户删除并重新安装应用程序。这种情况不会经常发生,但我希望这个数字为零。
我无法通过包装 NSKeyedUnarchiver 调用来解决问题,因为我没有源代码,而且这些调用不是我的代码所做的任何事情的直接结果;它们在任意时间在任意后台线程上运行。
我目前正在调整 NSKeyedUnarchiver 类,以便读取损坏的存档返回 nil(好像文件不存在)而不是抛出异常,但我无法确定这些第三方框架中的任何一个是否可能正确地做事(使用@try/@catch block ),如果我这样做,可能会以有趣的方式中断。
如果我能以某种方式检查 Objective-C 异常处理树(或等效的)以确定异常处理程序是否会在抛出异常时捕获异常,以及如果是,哪个处理程序会很有帮助。这样一来,如果异常会一直持续到 Crashlytics(它会重新抛出它,导致崩溃),我的修补方法可能会返回 nil,但如果其他处理程序捕获它,则可能会重新抛出异常。
这样的事情有可能吗,如果有,怎么做?
为什么不将抛出异常的调用点封装在 try/catch/finally 中?
@try {
//call to your third party unarchiver
}
@catch {
//remove your corrupted archive
}
@finally {
//party
}
滚动您自己的全局异常处理程序也可以在这里使用,例如:How do you implement global iPhone Exception Handling?
关于ios - 是否可以确定是否会捕获 Objective-C 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124576/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |