【发布时间】:2010-06-30 07:59:35
【问题描述】:
编辑:问题已解决(部分):这是一个模拟器错误。我已经在两个装有 iOS 3.1.3 和 4.0 的设备上编译和测试了它。异常处理正确。小心,模拟器是你的敌人!
这快把我逼疯了。我不知道如何在我的项目中启用异常处理。查看下面的代码和调试器输出。
我的目标是捕获异常,而不是更正代码以便处理异常并且应用不会崩溃。
我正在使用 XCode 3.2.3,iPhone SDK 4 final。我刚刚创建了一个简单的基于视图的 iPhone 应用程序来测试它。
我查看了我的项目设置,是的,“启用 Objective-C 异常”开关已被选中。我正在使用 GCC 4.2。
当我详细查看构建过程时,编译器标志 -fno-objc-exceptions 不在参数列表中!
我在这里错过了什么?
提前致谢 尼克
NSArray * foo = [[NSArray alloc] init];
@try {
NSLog(@"trying...");
[foo objectForKey:@"yeah"];
}
@catch (NSException * e) {
NSLog(@"catching %@ reason %@", [e name], [e reason]);
}
@finally {
NSLog(@"finally");
}
导致
trying...
-[__NSArrayI objectForKey:]: unrecognized selector sent to instance 0x5d5f780
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI objectForKey:]: unrecognized selector sent to instance 0x5d5f780'
*** Call stack at first throw:
(
0 CoreFoundation 0x02393919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x024e15de objc_exception_throw + 47
2 CoreFoundation 0x0239542b -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x02305116 ___forwarding___ + 966
4 CoreFoundation 0x02304cd2 _CF_forwarding_prep_0 + 50
...
)
terminate called after throwing an instance of 'NSException'
是否到达了 catch 块和 finally 块。
【问题讨论】:
标签: iphone objective-c xcode gcc exception-handling