Envoyer un message de demande de MAJ à¡ une vue. (Notification ?)
Paisible.fr
Membre
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
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
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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.
Ton projet fait un bon entraà®nement, et pose de bonnes questions.
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.
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.
En fait dans le modele j'ai juste des "Setters" et des "Getters" si je comprends bien ?
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?:
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.
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"