ios异常捕获

今天弄了一个之前没有弄过的功能,捕获app的异常,虽然不难,但还是想记录一下。

第一步、在哪里捕获

当然是在你出错的控制器里捕获,如果你想全局捕获,那你就把捕获方法写在你的根控制器里,比如BaseViewController.m里面

第二步、如何捕获

两段代码,代码量很少哒

第一处:写在ViewDidLoad里面

 NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler);

刚刚那句的意思就是添加一个捕获异常的监控的东西

第二处:写在外面,就是实现刚刚那个括号里的方法

void UncaughtExceptionHandler(NSException *exception) {
    NSArray *arr = [exception callStackSymbols];//得到当前调用栈信息
    NSString *reason = [exception reason];//非常重要,就是崩溃的原因
    NSString *name = [exception name];//异常类型

    NSLog(@"exception type : %@ \n crash reason : %@ \n call stack info : %@", name, reason, arr);

    NSString *errorinfo = [NSString stringWithFormat:@"异常类型: %@  闪退原因 : %@  闪退进程: %@", name, reason, arr ];
    NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];

    [accountDefaults removeObjectForKey:KAppErrorInfo];

    [accountDefaults setObject:errorinfo forKey:KAppErrorInfo];


}

上面就是如果你程序崩了的时候会调用的方法,里面可以捕获到异常最主要的信息了。

注意

你如果捕获到异常,想要把错误信息传给服务器,那是不可能的,因为你调不能接口的,所以,你只能等下次程序启动的时候再把上次崩掉的报错日志上传给服务器,So,你一定要在捕获崩溃的方法里把上次的错误信息保存为全局的,就是用NSUserDefaults这货来保存。

蓝后:
你可以在AppDelegate.m里面加上如下代码:

     NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];

    NSString *errorinfo = [accountDefaults objectForKey:KAppErrorInfo];

    if(!(errorinfo==nil)){
        [AccountModel UploadErrorInfo:errorinfo type:@"03"]; 
    }

酱紫,你就可以在启动的时候获取到上次你程序crash的错误日志啦。

吼吼吼,今天枫子酱就哆嗦这么多啦,纯属自个儿记录哒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值