Warnings intenpestifs
UniX
Membre
Salut.
J'ai un objet qui a une méthode appellée par plusieurs WindowController.
Pour savoir qui l'appelle, ma méthode est du type :
Dans cette méthode, je fais appel à des NSControl du WindowController appelant avec des choses du style :
Or, comme l'appelant est du type id dans ma méthode, le compilo me renvoie un warning
Comment faire pour m'en sortir pour virer ces warnings ???
J'ai un objet qui a une méthode appellée par plusieurs WindowController.
Pour savoir qui l'appelle, ma méthode est du type :
- (void)faireUneBelleAction:(id)sender
Dans cette méthode, je fais appel à des NSControl du WindowController appelant avec des choses du style :
[[sender monControl] stringValue]
Or, comme l'appelant est du type id dans ma méthode, le compilo me renvoie un warning
warning : no -monControl method found
Comment faire pour m'en sortir pour virer ces warnings ???
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Mais, warning ne veut pas dire erreur, ne t'en inquiètes donc pas.
.
Je sais que les warnings ne sont pas un pb, mais c'est pour essayer de ne pas se trimbaler 20 ou 30 warnings ..... ;D
Et donc...?
En plus, le cast (du moins au niveau des pointeurs) n'a aucune signification au niveau de la compilation même, il ne sert qu'à préciser que le pointeur manié est de d'un type précis (même s'il est d'un autre type).
Que l'objet passé dans sender soit de classe TRUCMUCHE ou MACHINCHOSE, cela n'a aucune importance dès lors que l'une ou l'autre des classes, au runtime, répondent au message faireUneBelleAction.
Donc, si tu "cast" sender en TRUCMUCHE, mais que l'objet soit MACHINCHOSE :
1. ça ne plantera pas l'appli (les 2 classes répondent au message),
2. ça ne fera pas de warning (le compilo détecte bien que TRUCMUCHE implémente la méthode).
.
C'est bon à savoir.
Il me reste quand même un warning, car si je caste sender en TRUCMUCHE et que je passe un objet MACHINCHOSE en argument, il me dit que ce n'est pas le bon type ....
Mais bon, j'ai troqué 20 warnings contre 1 , c'est mieux ...!
Merci en tous cas.
Donc tout ce que tu as à faire est de faire:
#import "UnDesControllerPerso.h" (dans le .m par exemple) pour que le compilo sache qu'une telle méthode existe et donc ne beugle pas, le cast n'est pas nécessaire si sender est de type id.
Les seules fois que j'ai du caster un objet de type id (lorsque les imports sont fait correctement) c'est lorsque j'utilise une méthode qui existe dans plusieurs classes et ayant la meme signature, mais ayant des arguments de types différents et/ou des types de renvoi de type différent (genre -(NSString*)type et -(NSCellType)type - NSCellType étant assimilable à un int). Mais bien entendu dans ce cas le le message d'erreur est différent.
Super, merci Bru et Renaud.