【发布时间】:2011-06-07 20:38:20
【问题描述】:
在我的 iOS (iPhone/cocos2d) 项目中,我发现自己抛出的异常不会导致应用程序终止(它们只会导致当前函数退出,从而导致奇怪的半冻结行为)。例如,以下代码会导致崩溃:
NSArray* testArray = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];
[testArray objectAtIndex:400];
当我运行该代码时,正如我所料,我在控制台中得到以下信息:
2011-06-07 12:55:20.421 mansion-iphone[38184:207] *** Terminating app due to
uncaught exception 'NSRangeException', reason: '*** -[NSArray
objectAtIndex:]: index 400 beyond bounds [0 .. 2]'
但是,如果我尝试引发异常(例如,从断言),除非我启用了“停止 Objective-C 异常”,否则我会半冻结。这对我来说很好,但是当我的测试人员报告问题时会导致问题——因为应用程序没有崩溃,他们没有崩溃日志可以发送给我。下面是一个不起作用的异常示例:
NSException* e = [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"%s %@", __PRETTY_FUNCTION__,
[NSString stringWithFormat:@"Invalid argument"]] userInfo:nil];
[e raise];
关闭“在 Objective-C 异常时停止”,这甚至不会导致向控制台发送消息——使用 NSAssert 反而会给我一个控制台消息,但仍然没有停止。因此,看起来 Cocoa 类生成的异常行为正确,但源自我的代码的异常却不是。
我检查了我的代码和 cocos2d 并没有找到任何似乎可以防止异常的 @try 块;有人有想法吗?
【问题讨论】:
标签: iphone objective-c ios exception