0

J'essaie de créer une catégorie NSError pour effectuer des erreurs prédéfinies en fonction des codes d'état. Cependant, chaque fois que je tente de créer un NSError de ma catégorie, je reçois unImpossible de créer NSError: sélecteur non reconnu

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

J'ai aussi essayé d'appeler la version d'instance du NSError Initializer, mais cela a le même résultat.

+(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; 
} 

Quand je lance ce code appelant la méthode statique, la sortie est:

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) 

Quelqu'un a des suggestions sur ce que je suis absent?

Répondre

2

Lorsque j'ai créé cette classe pour la première fois, c'était une sous-classe de NSError. Plus tard, quand j'ai essayé de le convertir d'une sous-classe à la catégorie, j'ai accidentellement renommé la classe de base de mon fichier d'en-tête pour taper NSObject au lieu de NSError. C'est bien sûr ce qui causait mon problème parce que NSObjects ne répond pas au sélecteur initWithDomain:code:userInfo.

De toute façon, merci à tous pour regarder. J'espère que ça aide quelqu'un d'autre.