我想在我的代码中的任何地方发生异常时显示警报。
不包含可能抛出异常的代码。
每次发生异常时,它都会在主类中显示错误。可以从那里处理吗?
这是我使用的抛出异常的正常方式:
@try {
// code that may throw exception
}
@catch (NSException * e) {
// show alert
}
@finally {
}
最佳答案
但是,我找到了一个有效的变通方法——创建我自己的异常处理程序(出于其他原因它也很有用)。首先,创建一个函数来处理错误并将其输出到控制台(以及你想用它做的任何其他事情)
void uncaughtExceptionHandler(NSException *exception) {
NSLog(@"CRASH: %@", exception);
NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
// Internal error reporting
}
接下来,将异常处理程序添加到您的应用委托(delegate)中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
// Normal launch stuff
}
如果这不起作用,那么只有两个可能的原因:
某些东西正在覆盖您的 NSSetUncaughtExceptionHandler 调用(您的整个应用程序只能有一个处理程序)。例如,一些 3rd 方库设置了自己的 uncaughtExceptionHandler。因此,请尝试将其设置在 didFinishLaunchingWithOptions 函数的末尾(或有选择地禁用第 3 方库)。或者更好的是,在 NSSetUncaughtExceptionHandler 上设置一个符号断点以快速查看谁在调用它。您可能想要做的是修改当前的而不是添加另一个。 您实际上并没有遇到异常(例如,EXC_BAD_ACCESS 不是异常)
关于ios - 从项目中的任何地方抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40858354/