2009-09-25 7 views
12

J'ai un appel comme celui-ci [Méthode de classe] et un avertissement disant que la classe ne peut pas répondre au message "méthode". Le message "method" n'existe pas mais mon code utilise un message inconnu en attrapant (en utilisant forwardingTargetForSelector) afin qu'il fonctionne bien et qu'il soit compilé pour fonctionner de cette façon. Comment puis-je cacher cet avertissement ennuyeux?Comment désactiver l'avertissement dans xcode sur une ligne spécifique?

Répondre

16

Si vous avez l'intention d'envoyer un éventuellement-inappliquées message à un objet, et vous savez que vous allez attraper les échecs, vous devez utiliser l'invocation:

id myClone = [anObject performSelector:@selector(copy)]; 

qui déclare votre intention plus directement que vous appelez une méthode qui peut ne pas exister, et vous êtes cool avec ça. C'est une façon plus claire de le faire que de supprimer l'avertissement ou de falsifier la méthode.

+0

Merci. Je suppose que ce serait moins efficace si je devais créer un sélecteur à chaque appel. Sauf si je déclare tout mon @selector un et pour tous. – CodeFlakes

+1

La différence de performance sera pratiquement indétectable. Si vous êtes inquiet, le profil. Ne pas optimiser prématurément. –

+2

'performSelector' ne fonctionne que pour les méthodes dont les types d'arguments et le type de retour sont tous des objets; et qui n'a que 0, 1 ou 2 arguments – user102008

3

Vous pouvez définir une catégorie qui déclare cette méthode. Avoir la définition dans la portée au moment de la compilation permettrait d'éviter l'avertissement. Quelque chose comme

@interface MyClass (ShutUpTheCompilerMethods) 
- (void)method; 
@end 

... 

[MyClass method] //no warning here 
Questions connexes