NSProgressIndicator ?

tabliertablier Membre
00:16 modifié dans API AppKit #1
:( J'essaie d'animer un NSProgressIndicator (spinning) et je n'y arrive pas.

Il me semble que pour envoyer un message à  un objet de l'interface on utilise un outlet et pour
envoyer une demande d'action depuis l'interface vers un objet on utilise un Target/Action.

Comme je veux demarrer et arreter l'animation d'un NSProgressIndicator par programme, j'ai mis un
NSProgressIndicator dans ma fenêtre et  je l'ai relié à  mon controleur par un outlet nommé o_toupie.
Dans la doc la syntaxe d'activation ( - (void)startAnimation:(id)sender  )  ressemble à  ce que l'on a quand on défini
un IBAction, non pas un outlet !!!!

Et la syntaxe [o_toupie startAnimation:sender ]  me donne une erreur du genre "Sender non défini"!!  :'(  

Quelle est mon erreur?

Réponses

  • AliGatorAliGator Membre, Modérateur
    00:16 modifié #2
    "sender" est une variable, si elle n'est pas définie c'est normal qu'il te mette ça comme erreur.

    Lorsque tu utilises une méthodes du genre [tt]-(IBAction)methode:(id)sender[/tt] c'est une simple méthode [tt]-(void)methode:(id)objectAyantAppeléLaMethode[/tt] comme une autre.

    Il se trouve que si tu utilises IB pour relier une action (clic sur un bouton, etc) à  cette méthode (cette IBAction), quand tu vas effectuer l'action (cliquer sur ledit bouton), Cocoa va automatiquement appeler la méthode en passant en paramètre (sender) l'objet qui a déclenché l'action.
    Donc si tu les relies avec IB, Cocoa va tout seul appeler la méthode "methode:" en passant en paramètre le NSButton qui a déclenché l'action. Mais si c'est toi qui l'appelle, il suffit de lui passer en paramètre... ben comme IB ferait, l'objet qui appelle la méthode. En gros pour faire simple : self, tout bêtement !

    [tt][o_toupie startAnimation:self]; // puisque c'est l'objet courant -- self -- qui lance l'action, c'est lui le "sender" à  passer en argument pour bien faire[/tt]

    Ceci dit au passage ça c'est pour le principe. Le paramètre sender est là  à  titre informel (justement parce que IB passe automatiquement celui qui a déclenché l'action en paramètre, ce qui peut t'être utile si tu veux distinguer qui a envoyé l'action), mais si tu ne t'en sers pas, à  la limite tu t'en fiches, techniquement tu peux très bien mettre nil puisque tu ne t'en sers pas. Mais bon, autant respecter la règle, surtout que tu ne sais pas ce qu'Apple fait du sender dans la méthode startAnimation.

    [PJ]Voilà  Renaud, j'ai fait ma prose, t'es content ? :D[/PJ]
  • tabliertablier Membre
    00:16 modifié #3
    Y-a des fois je me mettrais des baffes!!
    Bon j'etais pas trop loin car j'ai remplacé sender par le nom de la classe de mon controleur au lien d'utilisé l'objet lui-même.
    Je vais essayer avec self (ce qui est le plus simple pour désigner l'objet lui-même).
    Merci  :P
Connectez-vous ou Inscrivez-vous pour répondre.