2012-05-08 5 views
1

Im пытается добавить метод инициализации в категории, как это:Добавление Инициализаторы в категории

@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 о «супер» неоспоримым класса NSObject и не отвечает на initWithDomain ... Я попробовал отливку super к NSError, но компилятор говорит, что это запрещено.

Если я запустил его, я получаю «нераспознанный селектор, отправленный на ...», поэтому это не просто ошибка кастинга.

ответ

3

Вы не наследовать от NSError, вы добавил новый код к тому же классу. Поэтому вместо super вы, вероятно, должны звонить self.

+0

О, конечно, спасибо! – oskob

+0

, но если вы замените супер на себя, как это работает, если я еще не полностью инициализирован? – avance

+0

Это то же самое, что и в классе, где у вас есть назначенный инициализатор и куча удобных инициализаторов. Я предполагаю, но я бы предположил, что 'alloc' устанавливает достаточную информацию для' self' для работы в этом контексте. –