崩溃应用iOS后显示alertview

Le'*_*dok 1 exception objective-c uialertview ios

我试图在崩溃应用程序后显示用户alertview以提供有关崩溃的一些信息.如; "你崩溃了,我们会尽快解决." 是否可以在这里显示alertview?

我从这里得到了这部分代码,我把alertview放在里面.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

      NSSetUncaughtExceptionHandler(&myExceptionHandler);

}

void myExceptionHandler(NSException *exception)
{

     UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:@""
                      message:@"You got crash, we will fix as soon as possible!"
                      delegate:nil
                      cancelButtonTitle:@"Okay"
                      otherButtonTitles:nil, nil];
     [alert show];

     NSArray *stack = [exception callStackReturnAddresses];
     NSLog(@"Stack trace: %@", stack);

}
Run Code Online (Sandbox Code Playgroud)

我也试过这个代码来显示警报.

[alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];
Run Code Online (Sandbox Code Playgroud)

Ker*_*rni 5

你不应该这样做.

原因如下:

  1. 当您的应用崩溃时,应用处于非常不稳定的状态.您本可以尝试访问应用程序范围之外的内存,假设某个对象属于特定类型,而不是等等.如果您继续执行代码,则可能会覆盖/删除/损坏您的应用用户数据,因为您无法确定您的代码是否实际执行了您希望它执行的操作.
  2. 由于该不稳定状态,您不应在崩溃时调用任何(!!)非异步安全代码,其中包括任何Objective-C代码.只允许C的一个子集,您不应该在那时分配任何内存.
  3. 对于未处理的异常,您的代码只会触发警报(如果它甚至可以在大多数情况下由于上述情况而起作用).但这些只是您的应用可能会崩溃的原因的一部分.

您可以做的是询问用户在您的应用程序下次启动时发生崩溃之前他做了什么.要检测您的应用程序是否崩溃,您可以使用多个第三方服务或(开源)库来检测崩溃并在崩溃时(安全地)收集堆栈跟踪.