Cela fait 4 heures que je me gratte la tête en essayant toutes sortes de petites expériences, mais je n'arrive pas à comprendre ce qui ne va pas. Serait-ce un bug de compilateur?Avertissement du compilateur lors du passage de NSError ** comme paramètre de méthode
Test.m:
- (id)initWithContentsOfURL:(NSURL *)aURL error:(NSError **)error
{
if (!(self = [super init])) {
return nil;
}
return self;
}
main.m:
NSError *error;
Test *t = [[Test alloc] initWithContentsOfURL:[NSURL fileURLWithPath:@"/"] error:&error];
est ici le compilateur d'avertissement (de main.m):
warning: incompatible Objective-C types 'struct NSError **', expected 'struct NSDictionary **' when passing argument 2 of 'initWithContentsOfURL:error:' from distinct Objective-C type
J'utilise la dernière versions de Xcode et Snow Leopard.
Vous avez raison. Objective-C n'aime pas que les méthodes ayant la même signature aient des types différents (c'est-à-dire qu'elles ne surchargent pas), donc évitez de nommer deux méthodes de la même façon si elles prennent des paramètres différents. –
C'était tout! Merci! Je n'avais aucune idée d'Objective-C pourrait rencontrer ces problèmes de pollution de l'espace de noms. On pourrait penser qu'Apple aurait abordé cela dans Objective-C 2.0 ... – splicer
Oui, c'est un mauvais. J'ai été mordu par cela il y a un moment: http://stackoverflow.com/questions/312608/why-do-i-nene-to-cast-self-to-id – philsquared