我使用 HessianKit 与服务器通信。在网络或服务器宕机的情况下,Hessian 会抛出异常,所以我将每个 Hessian 调用放在一个 @try ... @catch 块中。一切正常,直到我将 Xcode 从 3.2.2 升级到 3.2.3。我写了一些测试代码,发现在 Xcode 3.2.3 下,如果异常是从代理对象抛出的,捕获异常会失败。
MyProxy.h:
@interface MyProxy : NSProxy {
}
@end
我的代理.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”.
我能做些什么?