[Résolu] receiver et appel de méthodes

manticoremanticore Membre
juin 2011 modifié dans Objective-C, Swift, C, C++ #1
Bonjour,

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 :

&nbsp; SomeClass *ptr = [[SomeClass alloc] init];<br />&nbsp; [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

Réponses

  • tabliertablier Membre
    juin 2011 modifié #2
    Dans la théorie, le receveur est l'objet qui reçoit le message et exécute la demande. Chaque objet est apte à  recevoir certains messages. les noms des messages sont définis dans le .h de l'objet, ce sont les methodes.
    [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
  • manticoremanticore Membre
    07:22 modifié #3
    Jusque là  j'arrive à  suivre.

    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 ?
  • AliGatorAliGator Membre, Modérateur
    07:22 modifié #4
    Non, pas le nom du fichier.
    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.
  • laudemalaudema Membre
    07:22 modifié #5
    dans 1308589354:

    Chaque objet est apte à  recevoir certains messages. les noms des messages sont définis dans le .h de l'objet, ce sont les methodes.

    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..
  • manticoremanticore Membre
    07:22 modifié #6
    Merci beaucoup pour votre aide, je pense que je vais pouvoir m'en sortir à  présent j'ai été faire un peu de lecture sur la gestion object de l'objective c et ça va mieux ;)
Connectez-vous ou Inscrivez-vous pour répondre.