Ios 如何拦截致命异常?
我想在我的iPad应用程序中集成一种方法来监控用户活动,尤其是发生并触发应用程序停止的异常,类似于苹果的bug报告,但适用于移动客户端 我试图将主操作(Ios 如何拦截致命异常?,ios,ipad,exception-handling,Ios,Ipad,Exception Handling,我想在我的iPad应用程序中集成一种方法来监控用户活动,尤其是发生并触发应用程序停止的异常,类似于苹果的bug报告,但适用于移动客户端 我试图将主操作(main.m)封装在@try和@catch块之间,但是直到那里才抛出异常,我无法在代码中的任何地方添加这样的块。委托方法applicationWillTerminate都没有被调用,应用程序只是在没有任何通知的情况下被粗暴地停止 有什么想法吗 它在main.m中对我有效 int main(int argc, char *argv[]) {
main.m
)封装在@try
和@catch
块之间,但是直到那里才抛出异常,我无法在代码中的任何地方添加这样的块。委托方法applicationWillTerminate
都没有被调用,应用程序只是在没有任何通知的情况下被粗暴地停止
有什么想法吗 它在
main.m中对我有效
int main(int argc, char *argv[]) {
@autoreleasepool {
int retVal = 0;
@try {
retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
@catch (NSException *exception) {
NSLog(@"Exception: %@", exception);
[exception raise];
}
return retVal;
}
}
附言
另一个棘手的方法:
和的示例想象以下场景:将“nil”添加到可变数组中,或尝试访问数组中不存在的索引。这种情况并不罕见,可能是控制器或元素在某种情况下无效且不存在,因此应用程序不会捕获抛出的异常,甚至不会使用NSError代替NSException。应用程序将在没有任何通知的情况下停止。您是对的,完全忘记了NSSetUncaughtExceptionHandler
总比没有更好的解决方案要好。在上介绍的解决方案解决了我的问题。在指定的响应中,只有方法1和方法2对我有效。我无法理解为什么上面的示例与我尝试过的示例类似,但不起作用,它应该与未处理的异常处理程序相同。