菜鸟教程小白 发表于 2022-12-13 16:27:26

iOS - UncaughtExceptions 全局异常处理程序不允许应用退出


                                            <p><p>我正在尝试将 Matt Gallagher 的全局异常处理程序添加到我的一个项目中。运行他的示例项目位于:</p>

<p> <a href="http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html" rel="noreferrer noopener nofollow">http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html</a> </p>

<p>我遇到了一个问题,我按下退出后应用程序没有退出。它只是让我回到应用程序。我尝试使用 kill() 调用终止应用程序,但无法让应用程序退出。</p>

<p>来自 alertview 的回调似乎只处理 Continue 情况,不处理强制应用退出。</p>

<pre><code>- (void)alertView:(UIAlertView *)anAlertView clickedButtonAtIndex:(NSInteger)anIndex
{
   if (anIndex == 0)
   {
      dismissed = YES;
   }
}
</code></pre>

<p>我知道应用程序本质上无法自行退出,但在这种情况下,如果应用程序崩溃,我希望用户按下退出按钮并让应用程序退出。</p>

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>Apple 不相信退出按钮。但是你可以抛出另一个你没有发现的异常导致你的应用程序崩溃,但是如果你的应用程序崩溃了,它就不会被批准。</p>

<p>我认为你可以通过在 info.plist 中将 UIApplicationExitsOnSuspend 设置为 true 来禁用后台,然后按下主页按钮将退出你的应用程序。在这种情况下,您可以将退出按钮设置为指向任何其他应用的链接。</p>

<p>将 if 语句更改为始终引发异常应该会使您的应用崩溃,从而退出。</p>

<pre><code>- (void)handleException:(NSException *)exception
{
    ;

    UIAlertView *alert =
      [[
            initWithTitle:NSLocalizedString(@&#34;Unhandled exception&#34;, nil)
            message:[NSString stringWithFormat:NSLocalizedString(
                @&#34;You can try to continue but the application may be unstable.\n\n&#34;
                @&#34;Debug details follow:\n%@\n%@&#34;, nil),
                ,
                [ objectForKey:UncaughtExceptionHandlerAddressesKey]]
            delegate:self
            cancelButtonTitle:NSLocalizedString(@&#34;Quit&#34;, nil)
            otherButtonTitles:NSLocalizedString(@&#34;Continue&#34;, nil), nil]
      autorelease];
    ;

    CFRunLoopRef runLoop = CFRunLoopGetCurrent();
    CFArrayRef allModes = CFRunLoopCopyAllModes(runLoop);

    while (!dismissed)
    {
      for (NSString *mode in (NSArray *)allModes)
      {
            CFRunLoopRunInMode((CFStringRef)mode, 0.001, false);
      }
    }

    CFRelease(allModes);

    NSSetUncaughtExceptionHandler(NULL);
    signal(SIGABRT, SIG_DFL);
    signal(SIGILL, SIG_DFL);
    signal(SIGSEGV, SIG_DFL);
    signal(SIGFPE, SIG_DFL);
    signal(SIGBUS, SIG_DFL);
    signal(SIGPIPE, SIG_DFL);

    ;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iOS - UncaughtExceptions 全局异常处理程序不允许应用退出,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/4350170/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/4350170/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS - UncaughtExceptions 全局异常处理程序不允许应用退出