我希望我的应用程序重置为标准设置,如果它在启动过程中崩溃.优选地,如果它在上次运行时崩溃了.
编辑:Crittercism有一个crittercismDidCrashOnLastLoad方法,但它只处理加载期间崩溃的情况.它在我使用的库版本中无法正常工作,但此后已得到修复.
建议?
在Objective-C中,NSSetUncaughtExceptionHandler可以注册一些功能来做最后一分钟的异常日志记录.
这并没有抓住Swift崩溃的东西.
是否有可能在Swift的全球范围内做这样的事情?例如,如果在Swift代码中发生崩溃,请执行一些日志记录,例如强制解包nil可选.
具体来说,我正在做一个实用程序来记录应用程序中的网络流量,如果发生崩溃,我想将内存中的数据刷新到磁盘.
我知道Cocoa中有一个UncaughtExceptionHandler,但我正在为Swift寻找同样的东西.即,当应用程序中由于任何错误而未在本地捕获任何错误/异常时,它应该一直冒泡到顶级应用程序对象,在那里我应该能够优雅地处理它并适当地响应用户.
在Objective-C中,每当应用程序崩溃时,我都可以通过使用此代码获取堆栈跟踪以查看导致错误的最后一个方法的位置 AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&myExceptionHandler);
return YES;
}
void myExceptionHandler(NSException *exception)
{
NSArray *stack = [exception callStackReturnAddresses];
NSLog(@"Stack trace: %@", stack);
NSLog(@"MyExceptionHandler");
}
Run Code Online (Sandbox Code Playgroud)
它会将堆栈跟踪日志打印到控制台,我可以使用它来调试问题的原因,而不是在main.m没有信息的情况下结束
那我怎么能在Swift中做到这一点?