当出现严重错误以至于我的应用程序无法继续并需要退出时,我想向用户弹出一个警告框,然后在他们点击 OK 按钮时关闭应用程序。听起来很简单,对吧?
但问题是:我的致命错误处理程序被第 3 方库调用(我没有他们的源代码)。我在初始化时给他们一个指向我的致命错误处理程序的指针,当他们遇到致命错误时,他们只需调用该例程并期望它永远不会返回。如果它返回,第 3 方库将假定我已经处理了错误,并且它将继续运行(可能会损坏数据,因为现在处于不一致的状态)。我可以在我的错误处理程序结束时退出应用程序(这是他们所期望的),但我希望能够首先向用户显示一条消息,告诉他们问题出在哪里。
不幸的是,如果我这样做:
-(void)fatalErrorHandler:(NSString *)msg
{
// Log the error and shut down all the things that need
// to be shut down before we exit
// ...
// Show an alert to the user to tell them what went wrong
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:msg delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
[alert show];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
exit(-1);
}
fatalErrorHandler 在 [alert show] 之后立即返回,它告诉第 3 方库我已经处理了错误,并且它将继续运行,就好像什么都没发生一样。这不好。
我不需要从 fatalErrorHandler 返回。曾经。但由于我在主线程上,所以 UIAlertView 在 fatalErrorHandler 返回之前不会出现。一个第 22 个问题。
关于如何在不从致命错误处理程序返回的情况下向用户显示警报的任何想法?