0

Я пытаюсь создать категорию NSError, чтобы сделать предопределенные ошибки на основе кодов состояния. Тем не менее, в любое время, что я пытаюсь создать NSError из моей категории, я получаюНевозможно создать NSError: unrecognized selector

+[NSError errorWithDomain:code:userInfo:]: unrecognized selector sent to class 0x2b2b20 

Я также попытался назвать версию экземпляра NSError Initializer, но это имеет тот же результат.

+(NSError*)errorOfType:(ErrorType)errorType inClassNamed:(NSString*)_nsClassName andMessage:(NSString*)_nsMessage 
{ 
    return [[[self class] alloc]initWithType:errorType inClassNamed: _nsClassName andMessage:_nsMessage]; 
} 


#pragma mark - 
#pragma mark - Init 

-(id)initWithType:(ErrorType)errorType inClassNamed:(NSString*)_nsClassName andMessage:(NSString*)_nsMessage 
{ 
    NSInteger _nCode = [self codeFromErrorType:errorType]; 
    NSDictionary *_nsUserInfo = [self localizedDescriptionForErrorType:errorType andMessage:_nsMessage]; 

    NSLog(@"Why Does this fail? Is this Nil? %@, \n%i, \n%@", _nsClassName, _nCode, _nsUserInfo); 

    if ([self respondsToSelector:@selector(initWithDomain:code:userInfo:)]) { 
     if (self = [self initWithDomain:_nsClassName code:_nCode userInfo:_nsUserInfo]){ 

     } 
    }else{ 
     NSLog(@"NSERROR Did not create!!!"); 
    } 

    return self; 
} 

Когда я запускаю этот код, который вызывает статический метод, Выход:

2013-05-10 17:46:18.851 BMPassSDK-DemoApp[99692:c07] Why Does this fail? Is this Nil? Domain, 
107, 
{ 
    NSLocalizedDescription = "A connection to the server could not be made. Please Try again later. "; 
} 
2013-05-10 17:46:18.851 BMPassSDK-DemoApp[99692:c07] NSERROR Did not create!!! 
2013-05-10 17:46:18.852 BMPassSDK-DemoApp[99692:c07] +[NSError errorWithDomain:code:userInfo:]: unrecognized selector sent to class 0x2b2b20 
(lldb) po 0x2b2b20 
$0 = 2829088 NSError 
(lldb) 

Кто-нибудь есть какие-либо предложения о том, что мне не хватает?

ответ

2

Когда я впервые сделал этот класс, он был подклассом NSError. Позже, когда я попытался преобразовать его из подкласса в категорию, я случайно переименовал базовый класс моего заголовочного файла, чтобы ввести NSObject вместо NSError. Это, конечно, то, что вызывало мою проблему, потому что NSObjects не реагируют на селектор initWithDomain:code:userInfo.

В любом случае, спасибо всем за то, что искали. Надеюсь, это поможет кому-то другому.

Смежные вопросы