在类别中添加初始化程序

时间:2012-05-08 08:52:35

标签: objective-c cocoa

我试图在类似的类别中添加init方法:

@interface NSError (message)

+(id)errorWithCode:(NSInteger)code message:(NSString*)message;
-(id)initWithCode:(NSInteger)code message:(NSString*)message;

@end

-     @implementation NSError(消息)

+(id)errorWithCode:(NSInteger)code message:(NSString*)message;
{
    return [[[[self class] alloc] initWithCode:code message:message] autorelease];
}

-(id)initWithCode:(NSInteger)code message:(NSString*)message;
{
    NSMutableDictionary * userInfo = [NSMutableDictionary dictionary];
    [userInfo setValue:message forKey:NSLocalizedDescriptionKey];

    self = [super initWithDomain:@"some.domain" code:code userInfo:userInfo]; // problem line

    return self;
}

@end

但是它抱怨了类NSObject的“超级”,而没有响应initWithDomain ...... 我尝试将超级转换为NSError,但编译器表示不允许这样做。

如果我运行它,我会将“无法识别的选择器发送到...”,因此它不仅仅是一个转换错误。

1 个答案:

答案 0 :(得分:3)

您没有NSError继承,您新代码添加到同一个类中。因此,您应该调用super而不是self