我试图在类似的类别中添加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,但编译器表示不允许这样做。
如果我运行它,我会将“无法识别的选择器发送到...”,因此它不仅仅是一个转换错误。
答案 0 :(得分:3)
您没有从NSError
继承,您将新代码添加到同一个类中。因此,您应该调用super
而不是self
。