delegation

GGGG Membre
20:34 modifié dans API AppKit #1
Bonjour à  tous,
je tente désormais d'ajouter une barre de progression dans mon projet (NSProgressIndicator), mais voila, lorsque je tente de le coder dans la classe qui gère cette progression, il n'y a pas de progression :p.
Et surtout lorsque je tente de fermer la fenêtre dont dépend la NSProgressIndicator, elle ne se ferme pas.
Vous avez une idée ?

Autrement comment puis je faire pour ajouter une NSProgressIndicator, et délégué son comportement à  une autre classe ?


[Fichier joint supprimé par l'administrateur]

Réponses

  • schlumschlum Membre
    20:34 modifié #2
    Pas étonnant, vu que performClose simule un clic d'utilisateur sur le bouton de fermeture...
    This action method simulates the user clicking the close button by momentarily highlighting the button and then closing the window.


    Comme ta fenêtre est NSBorderlessWindowMask, elle n'a pas ce bouton.

    -> "orderOut:"

    Ensuite, tu n'as apparemment pas encore saisi le principe !

    [progressionWindow makeKeyAndOrderFront:sender];<br />	<br />	[progression setDoubleValue:0];<br /><br />	<br />	[NSThread detachNewThreadSelector:@selector(loadImageIntoOYAMatrixThreaded:) <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  toTarget:self <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  withObject:theArray];<br />	<br />	<br />	[progressionWindow orderOut:sender];
    


    Ta fenêtre va s'ouvrir et se fermer tout de suite, vu que le thread va se lancer et que la fonction va continuer sans attendre que le thread se termine.

    Après, il y a beaucoup d'autres erreurs ; par exemple, la fenêtre n'est pas désallouée, ainsi que l'indicateur, qui a même du coup un retain count à  2 ! (une fois par alloc, et une fois par ajout à  la contentView de la fenêtre...)
  • GGGG Membre
    20:34 modifié #3
    Ok, comment faire pour ajouter une NSProgressIndicator dans la fenêtre principale (gérée par la classe contrôleur) et que le comportement de cette barre de progression soit délégué à  la classe OYAMatrix ?
  • schlumschlum Membre
    20:34 modifié #4
    En la mettant dans le .nib et en la laissant en indéterminé qui bouge pas, ou en la cachant quand on en n'a pas besoin.

    Et pour que ça soit géré par OYAMatrix, il suffit que cette classe ait un outlet qui pointe dessus, non ?
  • GGGG Membre
    20:34 modifié #5
    Lorsque je pointe cette NSProgressIndicator vers un IBOutlet de la classe OYAMAtrix, elle n'est pas définie, null pointer.
    Je n'arrive pas à  faire qu'elle pointe vers le IBOultet de OYAMAtrix. :(

  • schlumschlum Membre
    20:34 modifié #6
    Ben je vois pas comment t'as pu le connecter, vu que dans ton .nib, la classe OYAImageMatrix n'est pas à  jour par rapport au code et n'a pas l'outlet "progressionWindow"

    Quand on ajoute des outlets dans un .h, il faut le glisser sur la fenêtre du .nib pour prendre en compte les modifications.
  • GGGG Membre
    20:34 modifié #7
    heu mais le code que je modifie ne correspond plus à  celui qui est en téléchargement . :)

  • schlumschlum Membre
    20:34 modifié #8
    Ben mets le nouveau en téléchargement, et on verra bien alors  :P
  • GGGG Membre
    20:34 modifié #9
    Les voici  o:)

    [Fichier joint supprimé par l'administrateur]
  • schlumschlum Membre
    octobre 2007 modifié #10
    Ben dans ton OYAImageMatrix principal (celui qui est dans la fenêtre), "progression" n'est pas connecté, alors qu'il y a un pauvre "OYAImageMatrix" instancié tout seul qui lui est connecté au NSProgressIndicator via l'outlet "progression"... et qui ne sert à  rien puisqu'il n'est lui-même référencé nulle part (il n'est l'outlet d'aucun OYAImageMatrixController en tout cas).


    [Edit] D'ailleurs, quand je supprime le "OYAImageMatrix" instantié qui ne sert à  rien et que je connecte le NSProgressIndicator au bon OYAImageMatrix, ça fonctionne bien le projet    :)
  • GGGG Membre
    20:34 modifié #11
    tu veux dire que dans mon projet il existe plusieurs instances d'OYAMatrix ?
    Tu as pu le visionner avec l'interface builder ou par un autre moyen ?

    Dans le projet, l'outlet progression n'est pas connecté à  la bonne instance ?

  • schlumschlum Membre
    20:34 modifié #12
    dans 1191428105:

    tu veux dire que dans mon projet il existe plusieurs instances d'OYAMatrix ?
    Tu as pu le visionner avec l'interface builder ou par un autre moyen ?

    Dans le projet, l'outlet progression n'est pas connecté à  la bonne instance ?




    Oui, c'est exactement ça... Tu as une instance "visuelle" de "OYAImageMatrix" dans ta fenêtre (à  l'intérieur d'une NSScrollView), celle qui est connectée au "OYAImageMatrixController", et qu'on devrait aussi connecter au NSProgressIndicator ; et tu as aussi une instance de "OYAImageMatrix" qui ne sert à  rien qu'on peut voir à  droite de l'instance de "OYAImageMatrixController", et qui elle est connectée au NSProgressIndicator.

    Je crois qu'il faut que tu revoies un peu le concept d'instance :P
  • GGGG Membre
    20:34 modifié #13
    Hups je viens de comprendre (je sais, il m'a fallu du temps :)).
    En gros l'instance de OYAMatrix ne servait à  rien, alors qu'elle existait sur l'interface graphique (OYAMatrixController).
    Mille excuses, merci à  toi pour ta patience, mais il faut savoir que j'ai le cerveau lent :p.

  • schlumschlum Membre
    20:34 modifié #14
    dans 1191431297:

    Hups je viens de comprendre (je sais, il m'a fallu du temps :)).
    En gros l'instance de OYAMatrix ne servait à  rien, alors qu'elle existait sur l'interface graphique (OYAMatrixController).
    Mille excuses, merci à  toi pour ta patience, mais il faut savoir que j'ai le cerveau lent :p.




    Euh, oui, c'est à  peu près ça... L'instance utilisée par le programme et gérée par le contrôleur était celle de l'interface ; pour l'autre, ses méthodes n'étaient jamais appelées.
Connectez-vous ou Inscrivez-vous pour répondre.