1.抛出异常
@throw [NSException exceptionWithName:@"牛逼的错误" reason:@"方法找不到" userInfo:nil];
[NSException raise:@"牛逼的错误" format:@"%@方法找不到", NSStringFromSelector(selector)];
提示,必须输入有效的数据。
2.在搜集异常,并且在下次登录的时候返回给服务器
void handleException(NSException *exception){
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[@"callStackSymbols"] = [exception callStackSymbols];//调用栈信息(错误来源于那个方法)
dict[@"name"] = [exception name];//异常名字。
dict[@"reason"] = [exception reason];//异常描述。
// [dict writeToFile:<#(nonnull NSString *)#> atomically:<#(BOOL)#>];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//将沙盒中的错误信息传给服务器。
//设置捕捉异常的回调。
NSSetUncaughtExceptionHandler(handleException);
return YES;
}
3.常用的异常收集工具:Flurry,Crashlystics,友盟。
4.程序不死,开启runloop
[[NSRunLoop currentRunLoop]addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop]run];
程序在奔溃之前,重启runloop,保证程序缓慢死亡,提高用户体验。
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
[[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"-------点击了好的");
exit(0);
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 设置捕捉异常的回调
NSSetUncaughtExceptionHandler(handleException);
return YES;
}