方法一:在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;
}
网友评论