无法在Xcode 3.2.3下捕获代理对象的异常

时间:2010-09-08 13:23:40

标签: objective-c xcode xcode3.2

我使用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”.

我该怎么办?

2 个答案:

答案 0 :(得分:1)

我向Apple提交了一个错误,回复是:

已经确定这是一个已知问题,目前正在通过工程进行调查。此问题已在我们的错误数据库中以原始错误ID#7995323提交。

答案 1 :(得分:0)

也许您的项目/目标/可执行设置已搞砸了? 是否为您的配置/目标/等标记了“启用Objective-C例外”框?

如果是,也许您应该向Apple here提交错误。