菜鸟教程小白 发表于 2022-12-13 09:59:22

ios - 是否可以确定是否会捕获 Objective-C 异常?


                                            <p><p>我在 iOS(和 OS X)中遇到了一种情况,当他们尝试解压缩损坏的存档时,来自 NSKeyedUnarchiver 的异常会导致纯二进制第三方框架崩溃我的应用程序(当部署在现场时),因此强制用户删除并重新安装应用程序。这种情况不会经常发生,但我希望这个数字为零。</p>

<p>我无法通过包装 NSKeyedUnarchiver 调用来解决问题,因为我没有源代码,而且这些调用不是我的代码所做的任何事情的直接结果;它们在任意时间在任意后台线程上运行。</p>

<p>我目前正在调整 NSKeyedUnarchiver 类,以便读取损坏的存档返回 nil(好像文件不存在)而不是抛出异常,但我无法确定这些第三方框架中的任何一个是否可能正确地做事(使用@try/@catchblock ),如果我这样做,可能会以有趣的方式中断。</p>

<p>如果我能以某种方式检查 Objective-C 异常处理树(或等效的)以确定异常处理程序是否会在抛出异常时捕获异常,以及如果是,哪个处理程序会很有帮助。这样一来,如果异常会一直持续到 Crashlytics(它会重新抛出它,导致崩溃),我的修补方法可能会返回 nil,但如果其他处理程序捕获它,则可能会重新抛出异常。</p>

<p>这样的事情有可能吗,如果有,怎么做?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>为什么不将抛出异常的调用点封装在 try/catch/finally 中?</p>

<pre><code>    @try {
      //call to your third party unarchiver
    }

    @catch {
      //remove your corrupted archive
    }

    @finally {
      //party
    }
</code></pre>

<p>滚动您自己的全局异常处理程序也可以在这里使用,例如:<a href="https://stackoverflow.com/questions/1282364/how-do-you-implement-global-iphone-exception-handling" rel="noreferrer noopener nofollow">How do you implement global iPhone Exception Handling?</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 是否可以确定是否会捕获 Objective-C 异常?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32124576/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32124576/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 是否可以确定是否会捕获 Objective-C 异常?