在iOS中未捕获的异常后有没有办法执行代码?

mbu*_*c91 8 logging objective-c uncaught-exception ios ios6

我一直在为几个实现多级日志记录的应用程序开发框架.它主要用于内部用于测试与其他设备通信的应用程序,但也用于我们将要分发的一些应用程序中.

有没有办法捕获未捕获的异常并立即执行代码以将异常保存到日志文件中?目前,Log类只是经常写入文件,在写入失败的情况下在两个文件之间交替等等.这样可以正常工作,但是如果它可以看到发生未处理的异常,写入任何未写入的日志会很棒要记录的条目,请注意发生异常并记录其详细信息,然后允许该应用程序崩溃.

如果有一些方法来捕捉应用程序范围内未处理的异常,我会认为它会是这样的:

appDidReceiveUnhandledException:(NSException *)exception
{
    //write log to disk
    //append exception info to log file
    //rethrow exception
}
Run Code Online (Sandbox Code Playgroud)

如果有人能够就这是否可能给我提供见解或建议,我们将不胜感激.

Ric*_*own 17

您可以在AppDelegate中添加应用程序范围的未处理异常处理程序:

void HandleExceptions(NSException *exception) {
    NSLog(@"The app has encountered an unhandled exception: %@", [exception debugDescription]);
    // Save application data on crash
}
Run Code Online (Sandbox Code Playgroud)

在AppDelegate中引用它didFinishLaunchingWithOptions:

NSSetUncaughtExceptionHandler(&HandleExceptions);
Run Code Online (Sandbox Code Playgroud)