Envoyer un message de demande de MAJ à¡ une vue. (Notification ?)

Paisible.frPaisible.fr Membre
17:24 modifié dans API AppKit #1
Bonjour,

Je travaille actuellement sur un petit projet.
Il n'a pas de grand intérêt par lui même, mais qui me sert de support pour apprendre la programmation ObjC-Cocoa.

Il s'agit d'une application avec dans la vue un bouton qui genere un tableau de N entiers tirés au hasard, d'un bouton permettant de trier ce meme tableau avec un tri dichotomique.

A chaque click sur un des boutons l'étât du tableau est affiché dans une NSTextView. Affichage basique : une ligne une valeur en parcourant le tableau élément par élément.

J'ai une classe controleur "sortController" et une classe Modele "Sort" afin de respecter le MVC (enfin je pense).

Tout fonctionne, mais je souhaiterais apporter une petite amélioration : je voudrais que à¡ chaque permutation d'un element de mon tableau lors du tri l'affichage soit mis à¡ jour dans ma vue. Histoire de voir "fonctionner visuellement" le tri.

Donc je voulais savoir comment je pouvais faire pour envoyer depuis le Modele un signal à¡ la vue pour quelle se mete à¡ jour. J'ai cru comprendre que les Notifications pouvaient etre la réponse.

J'aimerais avoir confirmation sur cette option et avoir vos avis/suggestions sur la question.

Merci.

PS1 : oui, j'ai vu le petit topic sur les Notifs présent sur le forum
PS2 : oui je sais pour faire un tri il doit certainement exister un API cocoa qui le fait
PS 3 : oui l'affichage dans une NSTextView n'est pas forcement ce qu'il y a de plus heureux

Réponses

  • Philippe49Philippe49 Membre
    17:24 modifié #2
    C'est au contrôleur de demander la mise à  jour.

    Pour cela dans le sortController, mettre un IBOutlet pointant sur la vue à  rafraà®chir.
    Connecter cet outlet par IB.
    Rafraà®chir la NSTextView par la méthode adaptée à  la fin de chaque boucle de tri.


    dans 1205831669:

    PS1 : oui, j'ai vu le petit topic sur les Notifs présent sur le forum
    PS2 : oui je sais pour faire un tri il doit certainement exister un API cocoa qui le fait
    PS 3 : oui l'affichage dans une NSTextView n'est pas forcement ce qu'il y a de plus heureux


    Ton projet fait un bon entraà®nement, et pose de bonnes questions.
  • Paisible.frPaisible.fr Membre
    17:24 modifié #3
    Je suis d'accord c'est au controleur de demander la mise à¡ jour de la vue. Pour le reste je le suis moins, je m'explique :

    Actuellement j'ai mon bouton "lancer le trie" (vue), qui est intercepté (par mon controleur) qui lance le trie (modele).

    Donc si je met la Rafraà®chir la NSTextView aprés chaque fin de boucle de tri je me retrouve avec le modele qui demande la MAJ à¡ la vue alors que c'est au controleur de le faire, non ?

    Mon objectif est de faire une implementation correcte du MVC.


  • Philippe49Philippe49 Membre
    17:24 modifié #4
    C'est au contrôleur de faire le tri.
    La création, l'organisation des données revient au contrôleur.
    Le modèle c'est simplement "les tiroirs", "les meubles" où l'on range les données.



  • Paisible.frPaisible.fr Membre
    17:24 modifié #5
    Donc des fonctions comme melanger(), trier(), vider() n'ont rien à¡ faire dans le modele ?
    En fait dans le modele j'ai juste des "Setters" et des "Getters" si je comprends bien ?
  • AntilogAntilog Membre
    mars 2008 modifié #6
    Moi, je ferais:
    le tri dans le modèle
    le modèle demande le réaffichage au contrôleur ([controller updateUI])
    le contrôleur envoie les ordres de réaffichage qui vont bien aux différentes vues ([myView setNeedsDisplay:YES])
  • Paisible.frPaisible.fr Membre
    mars 2008 modifié #7
    dans 1205839468:

    Moi, je ferais:
    le tri dans le modèle
    le modèle demande le réaffichage au contrôleur ([controller updateUI])
    le contrôleur envoie les ordres de réaffichage qui vont bien aux différentes vues ([myView setNeedsDisplay:YES])


    C'est la façon de proceder à¡ laquelle je pensais au départ.

    Mais deux question se posaient à¡ moi :
    1) est-ce bien conforme au pattern MVC ? : apparement il y à¡ débat  :-\\
    2) comment techniquement faire que le modèle demande le réaffichage au contrôleur ? : là¡ j'ai ma réponse avec ton post 

    D'autres avis sur la question pour départager, dégager une tendance ?  :why?:
  • Philippe49Philippe49 Membre
    mars 2008 modifié #8
    dans 1205839468:

    Moi, je ferais:
    le tri dans le modèle


    Curieux.
    Concrètement ton modèle c'est quoi ?
    Si c'est une NSArray contenant des instances d'un classe perso, un catalogue d'individus par exemple, la NSArray est déclarée dans le contrôleur, et le tri se fait dans le contrôleur. Ce n'est pas le modèle "individu" qui va faire son tri.

    Si tu as fait un étage supplémentaire :
         Controller --> MyArray --> individus
    Alors pour suivre les conseils d'Aligator,
    Tu mets une instance myController dans ta classe MyArray
    A la création par theController de l'instance myArray de MyArray, tu mets un
               [myArray setValue:self forKey:@myController]
    et lors du tri, tu appelles au rythme que tu veux, la méthode updateUI du Controller pour qu'il ordonne la mise à  jour


    Sans dire, personnellement dans ce cas, je mets l'array dans le contrôleur.
  • Philippe49Philippe49 Membre
    17:24 modifié #9
    L'ambiguà¯té de ta question vis à  vis du MVC, c'est que voulant observer pas à  pas le tri s'effectuer, l'unité d'action de la méthode n'est plus le tri en entier, mais une étape du tri.

    Donc la méthode du modèle serait "réaliser une étape du tri"
    La méthode du contrôleur : "faire réaliser les étapes du tri et les visualiser"


Connectez-vous ou Inscrivez-vous pour répondre.