我和Uncaught exception handler not called的情况类似,但他是Mac应用程序,我的是iOS应用程序。解决方案是使用ExceptionHandler
框架,但这在iOS上不可用。
我有一个全新的iOS单一视图应用程序,它只有几行代码,所以我不会粘贴整个文件。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&handler);
@throw NSInternalInconsistencyException;
return YES;
}
void handler()
{
NSLog(@"hello world");
}
所以在didFinishLaunchingWithOptions
中我设置了自定义异常处理程序,然后强行崩溃。然后,异常处理程序用于将hello world
打印到控制台,但这不会发生。在处理程序中放置断点表明执行不会进入方法。但是,无论如何都会将异常打印到控制台(默认操作)。
2014-07-24 08:58:25.476 Exception[430:70b] *** Terminating app due to uncaught exception of class '__NSCFConstantString'
libc++abi.dylib: terminating with uncaught exception of type __NSCFConstantString
在我的处理程序之后,默认情况下是否会设置另一个异常处理程序?
更新
我决定更改崩溃的方式从NSInternalInconsistencyException
到[[NSArray arrayWithObject:@"object"] objectAtIndex:1];
。现在正在调用处理程序,并且hello world
正在打印到控制台。
现在的问题是,为什么NSINternalInconsistencyException
不会导致处理程序被调用?错误略有不同:
2014-07-24 10:13:51.333 Exception[1474:70b] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:
...
...
...
libc++abi.dylib: terminating with uncaught exception of type NSException