• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:27:26 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

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

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

- (void)alertViewUIAlertView *)anAlertView clickedButtonAtIndexNSInteger)anIndex
{
   if (anIndex == 0)
   {
        dismissed = YES;
   }
}

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

谢谢!



Best Answer-推荐答案


Apple 不相信退出按钮。但是你可以抛出另一个你没有发现的异常导致你的应用程序崩溃,但是如果你的应用程序崩溃了,它就不会被批准。

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

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

- (void)handleExceptionNSException *)exception
{
    [self validateAndSaveCriticalApplicationData];

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

    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);

    [exception raise];
}

关于iOS - UncaughtExceptions 全局异常处理程序不允许应用退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350170/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap