崩溃统计、重启程序

方法一:在AppDelegate中
    //c语言的函数
    void handleException(NSException *exception)
   {
    NSMutableDictionary *info = [NSMutableDictionary    dictionary];
    info[@"callStack"] = [exception callStackSymbols]; // 调用栈信息(错误来源于哪个方法)
    info[@"name"] = [exception name]; // 异常名字
    info[@"reason"] = [exception reason]; // 异常描述(报错理由)
    然后将数据写入沙盒中。。。
   }
  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Override point for customization after application launch.
      // 将沙盒中的错误信息传递给服务器
      。。。。
      // 设置捕捉异常的回调(系统自带)
      NSSetUncaughtExceptionHandler(handleException);  
      return YES;
  }
方法二:在main.m中
@try {
      @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
      }
      } @catch (NSException *exception) {
        将错误信息写入沙盒中
      }
方法三:第三方平台
  友盟、等等........

思路:拦截崩溃信息,将崩溃信息写入沙盒中,然后上传到服务器。


让程序直接退出

exit(0);


弹框提示用户程序崩溃、重启
    void handleException(NSException *exception)
    {
        [[UIApplication sharedApplication].delegate performSelector:@selector(handle)];
    }
    - (void)handle
    {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"意外" message:@"程序挂了" delegate:self cancelButtonTitle:@"重启" otherButtonTitles:nil, nil];
        [alertView show];
        // 因为程序的Runloop已经挂了,所以需要重新启动RunLoop
        [[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
        [[NSRunLoop currentRunLoop] run];
    }
     - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        NSLog(@"用户点击的重启");
        //重启操作
    }
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions         {
        // 设置捕捉异常的回调
        NSSetUncaughtExceptionHandler(handleException);
        return YES;
    }

你可能感兴趣的:(崩溃统计、重启程序)