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

参见英文答案 > How to do a application level exception handling in iPhone application3个
我一直在为几个实现多级日志记录的应用程序开发框架.它主要用于内部用于测试与其他设备通信的应用程序,但也用于我们将要分发的一些应用程序中.

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

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

appDidReceiveUnhandledException:(NSException *)exception
{
    //write log to disk
    //append exception info to log file
    //rethrow exception
}

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

解决方法

您可以在AppDelegate中添加应用程序范围的未处理异常处理程序:
void HandleExceptions(NSException *exception) {
    NSLog(@"The app has encountered an unhandled exception: %@",[exception debugDescription]);
    // Save application data on crash
}

在AppDelegate中引用它将didFinishLaunchingWithOptions作为:

NSSetUncaughtExceptionHandler(&HandleExceptions);

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...