2009-06-24 7 views
28

Dans mon projet en cours dans le fichier ViewController.m, je suis en cours d'exécution de la méthode:les « multiples Defeating méthodes nommées « xxx: » trouvé » erreur

[[connection writer] writeData: data]; 

Il retourne l'avertissement:

warning: multiple methods named 'writeData:' found 

Je tente d'appeler la méthode:

- (void) writeData: (NSData*)data 

... dans TCPWriter.m. Malheureusement, il y a deux autres méthodes writeData

- (void)writeData:(NSData *)data; 

... dans NSFileHandle.h et ...

- (BOOL)writeData:(NSData *)data 

... à NSURLHandle.h. Ceci est particulièrement déroutant pour moi car [conn writer] devrait renvoyer la classe TCPWriter et cette classe devrait appeler la méthode correcte writeData. En outre, je ne suis même pas complètement sûr que NSFileHandle.h et NSURLHandle.h sont même inclus dans l'une des bibliothèques incluses dans ViewController.h, plutôt que dans une partie différente du projet.

Comment est-ce que je peux montrer au compilateur quelle méthode writeData je veux appeler et pourquoi cette erreur se produit-elle?

Répondre

53

Assurez-vous que [writer de connexion] renvoie réellement un TCPWriter *. S'il retourne un identifiant, le compilateur ne saura pas quelle writeData utiliser. En outre, assurez-vous que vous importez le fichier TCPWriter.h - si le compilateur ne voit pas les fichiers d'en-tête, il retournera par défaut l'identifiant de retour, ce qui vous ramènera au même problème.

Essayez

TCPWriter* writer = [connection writer]; 
[writer writeData: data]; 

ou

[(TCPWriter*)[connection writer] writeData: data]; 
+1

Je n'avais pas réalisé qu'il renvoyait un ID par défaut lorsque le fichier n'était pas importé explicitement. Merci! – Holtorf

+2

Activez les avertissements et vous n'aurez pas à vous demander. Autres indicateurs de liens: -Wall, et activer autant d'autres, y compris Traiter les avertissements comme des erreurs. –

4

Comme alternative à la magnifique réponse ci-dessus, vous pouvez lancer l'objet du type droit de se débarrasser de l'avertissement aussi, comme ceci:

[(NSView*)textView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; // for horizontal scrolling 
Questions connexes