2012-05-08 74 views
1

我试着去添加某一类别中的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 

但complais关于 “超级” beeing类NSObject和没有响应initWithDomain ... 我试图超级NSError投入,但编译器说不允许。

如果我运行它,我得到“无法识别的选择器发送到...”,所以它不只是一个铸造错误。

回答

3

您从NSError没有继承,你添加新的代码相同的类。所以,而不是super你应该可以打电话self

+0

哦,当然,谢谢一堆! – oskob

+0

但是如果你用自己替换超级,如果自己还没有完全初始化,那么它是如何工作的? – avance

+0

这与您有一个指定的初始化程序和一堆方便初始程序的类相同。我在猜测,但我会想象''alloc'为'self'设置足够的信息以在这种情况下工作。 –