Appel de méthode

RocouRocou Membre
17:23 modifié dans API AppKit #1
J'ai défini une méthode IBAction dans mon controleur qui se déclenche suite à  un clic sur un NSPopUpButton. Tout fonctionne bien.

Néanmoins, j'aimerais également appeler cette méthode dans le code de ma vue (dans rightMouseDown).
Comment faire?

J'ai essayé:

[appControlleur maMethode];
ça ne passe pas à  la compilation ("appControlleur non défini").

de déclarer un autre outlet sur le NSPopUpButton dans le fichier.h de ma vue et de redéfinir la méthode (copier-coller) dans le code de ma vue.
Plantage de l'application.




Réponses

  • GreensourceGreensource Membre
    17:23 modifié #2
    Il faut que ta vue est un attribut NSController* monController, celui qui a déclarer l'Action que tu veux appelé. Et là  ça devrais marcher. Fait attention de bien faire les liens dans IB, ça vient peut-être de ça.
  • mpergandmpergand Membre
    17:23 modifié #3
    dans 1246459581:

    Il faut que ta vue est un attribut NSController* monController, celui qui a déclarer l'Action que tu veux appelé.


    Et le principe du MVC hein ?

    La vue n'a pas à  connaà®tre le contrôleur !

    D'abord, on suppose que le right clic sur la vue sert à  autre chose qu'à  montrer un menu contextuel (fonction standard) sinon le problème est résolu  ;)

    Reste donc le cas où on veut définir une action spéciale déclenchée par un right clic.

    Dans la vue on va définir deux variables:

    id target;
    SEL rightAction;

    + les méthodes qui vont bien.

    Dans le contrôleur initialiser cette action:
    <br />[mavue setTarget:self];<br />[mavue setAction:@selector(vueRightAction:)];<br />
    

    Dans mavue pou right clic faire:
    <br />- (void)rightMouseDown:(NSEvent *)theEvent<br />{<br />&nbsp; [target performSelector:rightAction withObject:self];<br />}
    


    Ne reste plus qu'à  implémenter la méthode vueRightAction dans le contrôleur.

  • GreensourceGreensource Membre
    juillet 2009 modifié #4
    Hum en effet c'est beaucoup plus souple!
    Enfin au final ta vue connaà®t le contrôleur, elle sais juste pas que c'est un contrôleur.

    C'est bien ça, ça va m'aider à  pas mal de truc. Pour la petit info je viens de JAVA et tout est Typé dans JAVA, j'ai donc du mal avec id  :P
  • RocouRocou Membre
    17:23 modifié #5
    dans 1246460872:

    Reste donc le cas où on veut définir une action spéciale déclenchée par un right clic.


    merci mpergand mais en fait, ce n'est pas tout à  fait cela. Du code dans le rightMouseDown doit s'exécuter avant de déclencher cette "action spéciale".
  • mpergandmpergand Membre
    17:23 modifié #6
    dans 1246462886:

    dans 1246460872:

    Reste donc le cas où on veut définir une action spéciale déclenchée par un right clic.


    merci mpergand mais en fait, ce n'est pas tout à  fait cela. Du code dans le rightMouseDown doit s'exécuter avant de déclencher cette "action spéciale".


    Et alors, où est le problème ?

    Néanmoins, j'aimerais également appeler cette méthode dans le code de ma vue (dans rightMouseDown).
    Comment faire?


    Bien que ne sachant pas ce que fait cette méthode, j'ai le pressentiment qu'elle devrait se trouver dans la vue ...

    Car du coup plus de prob  :)
  • RocouRocou Membre
    17:23 modifié #7
    dans 1246464143:

    Bien que ne sachant pas ce que fait cette méthode, j'ai le pressentiment qu'elle devrait se trouver dans la vue ...

    Car du coup plus de prob  :)

    :o
    C'est bien mon sentiment. Mais dans ce cas, a quoi sert un contrôleur?
    Comme je le dis dans un autre fil, toute mon application est liée à  ma vue, dès lors, je me demande à  quoi sert ce fichu contrôleur  :)
  • mpergandmpergand Membre
    juillet 2009 modifié #8
    dans 1246462416:

    Hum en effet c'est beaucoup plus souple!
    Enfin au final ta vue connaà®t le contrôleur, elle sais juste pas que c'est un contrôleur.


    En fait, la vue n'a pas à  dire au controller fait ci fait ça ...
    Elle délègue, quand l'utilisateur clique sur la vue, celle-ci informe le contrôleur.

    dans 1246462416:

    C'est bien ça, ça va m'aider à  pas mal de truc. Pour la petit info je viens de JAVA et tout est Typé dans JAVA, j'ai donc du mal avec id  :P


    Ici tu peux utiliser NSObject, ça marche aussi bien.

    Si tu connais bien java, alors tu seras d'accord avec moi pour dire que ObjectiveC, c'est un peu bricolo par moments  :)
  • RocouRocou Membre
    17:23 modifié #9
    dans 1246465133:

    En fait, la vue n'a pas à  dire au controller fait ci fait ça ...
    Elle délègue, quand l'utilisateur clique sur la vue, celle-ci informe le contrôleur.


    Comment?
  • mpergandmpergand Membre
    juillet 2009 modifié #10
    dans 1246465043:

    C'est bien mon sentiment. Mais dans ce cas, a quoi sert un contrôleur?
    Comme je le dis dans un autre fil, toute mon application est liée à  ma vue, dès lors, je me demande à  quoi sert ce fichu contrôleur  :)


    Si cette méthode n'agit que sur des paramètres de la vue, alors elle doit être dans la vue.
    Le contrôleur, lui, sert de liaison entre la vue et des éléments extérieurs à  cette vue.
  • RocouRocou Membre
    17:23 modifié #11
    dans 1246466376:

    dans 1246465043:

    C'est bien mon sentiment. Mais dans ce cas, a quoi sert un contrôleur?
    Comme je le dis dans un autre fil, toute mon application est liée à  ma vue, dès lors, je me demande à  quoi sert ce fichu contrôleur  :)


    Si cette méthode n'agit que sur des paramètres de la vue, alors elle doit être dans la vue.
    Le contrôleur, lui, sert de liaison entre le vue et des éléments extérieurs à  cette vue.

    Et bien le right clic provoque l'affichage d'un NSPanel qui va contenir des données de la vue.
    L'utilisateur peut agir sur ces données (les modifier ou en ajouter) qui repartent mettre à  jour la vue.
    Alors je me pose la question: Qui doit contenir le code gérant ce NSPanel? Un contrôleur ou la vue?
  • mpergandmpergand Membre
    17:23 modifié #12
    dans 1246466821:

    Et bien le right clic provoque l'affichage d'un NSPanel qui va contenir des données de la vue.
    L'utilisateur peut agir sur ces données (les modifier ou en ajouter) qui repartent mettre à  jour la vue.
    Alors je me pose la question: Qui doit contenir le code gérant ce NSPanel? Un contrôleur ou la vue?


    Dans ce cas et sans l'ombre d'une hésitation: le contrôleur.
Connectez-vous ou Inscrivez-vous pour répondre.