1

我有子类 NSException 类来创建 CustomException 类。

每当我在代码中(在@catch 中)捕获异常时,我想使用作为参数传递给@catch 的NSException 对象来初始化CustomException 对象(NSException 的子类)。

像这样的东西

@catch (NSException * e) {

CustomException * ex1=[[CustomException alloc]initWithException:e errorCode:@"-11011" severity:1];
}

我尝试通过将 NSException 对象传递给 CustomException 的 init 方法来做到这一点。(我用传递的 NSException 对象替换了 [super init],如下所示)

//initializer for CustomException
-(id) initWithException:(id)originalException errorCode: (NSString *)errorCode severity:(NSInteger)errorSeverity{

    //self = [super initWithName: name reason:@"" userInfo:nil];
    self=originalException;
    self.code=errorCode;
    self.severity=errorSeverity;

    return self;
}

这行不通!我怎样才能做到这一点?

提前致谢

4

2 回答 2

0
self = originalException;

当你这样做时,你只是将一个NSException对象分配给你NSCustomException,所以会发生以下事情:

  • 执行分配时您可能会收到警告,因为这 CustomException是预期的,但您传递的只是一个NSException 对象;(

  • 之后,编译器会认为这self 是一个CustomException对象,因此在调用类的某些方法时它不会抱怨,CustomException但在达到这些方法时会崩溃。

您应该启用initWithName:reason:userinfo:并且不执行分配。

于 2011-02-02T08:41:48.427 回答
0

您正在尝试做一些通常 [*] 不受任何 OO 语言支持的事情 - 将类的实例转换为其子类之一的实例。

您的分配self=originalException只是(类型不正确)指针分配(编译器和运行时不会检查您已用作id类型) - 这不会CustomExceptionNSException.

实现你想要替换self=originalException的东西

[super initWithName:[originalException name]
       reason:[originalException reason]
       userInfo:[originalException userInfo]]

然后继续初始化你添加的字段CustomException


[*] 在 Objective-C,在某些情况下可以正确地将一个类实例转换为一个子类实例,但不要在没有非常非常非常好的理由的情况下这样做。如果你不知道你甚至不应该去想它;-)

于 2011-02-02T09:29:25.143 回答