2

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

我能做些什么?

4

2 回答 2

1

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

已确定这是一个已知问题,目前正在由工程部门进行调查。此问题已在我们的错误数据库中以原始错误 ID# 7995323 归档。

于 2010-09-13T23:51:02.797 回答
0

也许你的项目/目标/可执行设置已经搞砸了?是否为您的配置/目标/等勾选了“启用 Objective-C 异常”框?

如果是,也许你应该在此处向 Apple 提交错误。

于 2010-09-08T13:39:09.513 回答