[Résolu] receiver et appel de méthodes
Bonjour,
j'ai quelques questions très basique car je me retrouve toujours avec la fameux message d'erreur
Ce principe de receiver m'échappe complétement... je comprend pas son utilité et surtout comme l'utiliser.
Première question l'utilité, j'ai l'impression que cela permet de faire des choses de ce type :
Est-ce la seule utilité ?
Deuxième question :
Je veux créer plusieurs fichiers pour rendre le code plus lisible. J'ai des méthodes qui ont par exemple cette signature (cette méthode est dans un fichier.h + .m indépendant) :
Maintenant si j'utilise cette méthode dans un autre fichier.m je me retrouve toujours avec le invalid receiver type, voici comment je pensais qu'il fallait l'appeler :
J'ai tout faux ?
Merci de votre aide
j'ai quelques questions très basique car je me retrouve toujours avec la fameux message d'erreur
invalid receiver type ...
Ce principe de receiver m'échappe complétement... je comprend pas son utilité et surtout comme l'utiliser.
Première question l'utilité, j'ai l'impression que cela permet de faire des choses de ce type :
SomeClass *ptr = [[SomeClass alloc] init];<br /> [ptr printInstanceVars];
Est-ce la seule utilité ?
Deuxième question :
Je veux créer plusieurs fichiers pour rendre le code plus lisible. J'ai des méthodes qui ont par exemple cette signature (cette méthode est dans un fichier.h + .m indépendant) :
- (CGImageRef *) createGrayCopyFromCGImage:(CGImageRef *)imageSource;
Maintenant si j'utilise cette méthode dans un autre fichier.m je me retrouve toujours avec le invalid receiver type, voici comment je pensais qu'il fallait l'appeler :
CGImageRef *image = [cgImage createGrayCopyFromCGImage:cgImage];
J'ai tout faux ?
Merci de votre aide
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
[lobjet message:argument] => envoie du message "message" à "lobjet" avec le paramètre "argument".
Pour qu'un objet envoie un message à un autre objet, il faut qu'il connaisse cet objet et ses méthodes. Donc il faut lui importer le .h de l'autre objet. Sinon le compilateur déclare une erreur.
Je crois qu'un peu de lecture sur Objective-C te ferait du bien.
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html
J'ai fais quelques tests et je crois que je commence à saisir l'utilisation :
si je créer un fichier .m qui contient des méthodes et que je veux les appeler, je dois toujours mettre le nom de ce fichier en receiver ?
Ni le nom de la classe d'ailleurs " sauf si c'est une méthode de classe ce qui est surtout le cas pour les allocateurs et constructeurs de commodité (même si ça n'est pas le seul cas mais ne rentrons pas dans les cas de détail)
Mais l'instance elle-même (souvent portée par une variable, à moins que soit directement le retour d'un autre envoi de message)
Bref c'est l'instance sur laquelle tu veux appeler la méthode (<=> envoyer le message), principe de base en POO puisque qui dit Programmation Orientée Objet dit objets et méthodes d'instance.
Et les messages destinés à ses ancêtres jusqu'à l'objet racine dont il est issu. Et qui sont implicitement déclarés dans le .h, au moins pour le premier parent, après il faut remonter la hiérarchie.
Quand des fois on ne trouve pas d'où vient la méthode utilisée sur un objet il ne faut pas oublier les méthodes des parents (il y aussi les catégories et les protocoles auquel(le)s il peut adhérer). Et il vaut mieux les connaà®tre (à commencer par celles de NSObject !), on leur trouve souvent des raison d'être à postériori..