我使用HessianKit与服务器通信。在网络或服务器关闭的情况下,Hessian将抛出异常,因此我将每个Hessian调用放在@try ... @catch块中。一切正常,直到我将Xcode从3.2.2升级到3.2.3。我编写了一些测试代码并在Xcode 3.2.3下找到,如果从代理对象抛出异常,catch异常将会失败。
MyProxy.h:
@interface MyProxy : NSProxy {
}
@end
MyProxy.m:
@implementation MyProxy
- (id)init {
return self;
}
- (void)forwardInvocation:(NSInvocation *)invocation {
NSLog(@"Call method %@", NSStringFromSelector([invocation selector]));
[NSException raise:@"MyException" format:@"this is an exception"];
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
.....
}
@end
使用MyProxy的代码:
@try {
MyProxy *p = [[MyProxy alloc] init];
[p doSomething];
[p release];
}
@catch (NSException * e) {
NSLog(@"%@", e);
}
当在xcode 3.2.2下构建这些代码时,可以正确捕获异常。但是在xcode 3.2.3下,程序在控制台上输出后终止:
2010-09-08 21:09:29.877 BriefCase[34651:40b] Call method doSomgthing
2010-09-08 21:09:29.879 BriefCase[34651:40b] *** Terminating app due to uncaught exception 'MyException', reason: 'this is an exception'
2010-09-08 21:09:29.880 BriefCase[34651:40b] Stack: (
45955152,
47113004,
45692683,
45692522,
151932,
45426420,
45423090,
9352,
4417860,
4421967,
4447550,
4429047,
4461016,
53399932,
45234332,
45230248,
4420129,
4453234,
8812,
8666
)
terminate called after throwing an instance of 'NSException'
Program received signal: “SIGABRT”.
我该怎么办?
答案 0 :(得分:1)
我向Apple提交了一个错误,回复是:
已经确定这是一个已知问题,目前正在通过工程进行调查。此问题已在我们的错误数据库中以原始错误ID#7995323提交。
答案 1 :(得分:0)
也许您的项目/目标/可执行设置已搞砸了? 是否为您的配置/目标/等标记了“启用Objective-C例外”框?
如果是,也许您应该向Apple here提交错误。