Mettre à jour une donnée dans 2 vues
Bonjour à tous,
Je souhaiterais avoir vos conseils sur la mise en place d'une fonctionnalité dans mon application, voici les explications :
j'ai donc une tableviewcontroller dans laquelle les données proviennent d'une API, une liste d'objet avec la quantité. En cliquant sur la cellule on obtient le détail de l'objet dans une vue detailViewController avec notamment la quantité mais aussi d'autres informations. Sur cette écran je souhaite mettre à jour la quantité, dans l'api une requête est disponible pour réaliser cela. Toutes les données dans detailViewController sont transmises par la fonction prepareForSegue de tableViewController.
Donc comment procéder pour la mise à jour de la donnée quantité à partir de detailViewController afin qu'elle soit actualisée dans les 2 vues (tableviewcontroller et detailViewController) sachant que les données sont parsées dans tableviewcontroller?
Merci de votre aide
Réponses
MVC ...
M : Modèle de données
V : Vue
C : Controleur
Un Modèle peut être accessible par plusieurs controleurs.
Concrétement cela veut dire que tu dois créer un objet spécifique pour parser tes données, et fournir un lien à tes deux contrôleurs pour qu'ils puissent l'utiliser.
Tu peux aussi créer un petit objet modèle commun aux deux contrôleurs pour communiquer les informations.
Le sujet a déjà été abordé dans ce topic :
http://forum.cocoacafe.fr/topic/13849-résolu-transmission-de-variables-au-sein-des-pages-dun-uipagviewcontroller/?p=133162
Salut,
j'ai dû laisser tomber pendant quelques temps le développement de mon application.
Je commence à m'y remettre, merci pour la réponse.
Si je comprends bien il va falloir que j'appelle l'objet spécifique (qui parse les données) à chaque fois que l'utilisateur passe de la TableView vers la detailView (et inversement), car s'il a modifié la quantité dans la détailView il faut que je l'actualise dans la TableView.
Merci.
Tu peux aussi utiliser des notifications.
Disons que sur iPhone, on n'a qu'une TableView par écran, donc en général, il n'y a pas besoin de prévenir qu'on a changé les données, puisque la deuxième TableView va de toute façon aller chercher les données lors de son affichage. Sur iPad, c'est différent, parce que deux tables peuvent effectivement être à l'écran en même temps.
@Geoffrey tu pourrais m'expliquer comment utiliser les notifications.
Merci à vous
Tu devrais regarder les tutos de ma signature. Voici la session traitant des notifications :
http://pagesperso.lip6.fr/Fabrice.Kordon/5I452-2014/semaine-10.php
Bonjour à tous,
J'ai ragardé des tutos sur les notifications, c'est intéressant mais je n'arrive pas à réaliser ce que je souhaite.
En effet, il faudrait que je puisse faire ceci :
- dans la detailViewController lorsque je modifie la quantité, que la cellule soit modifiée de suite, la modification concerne l'ajout d'une petite icone (UIImage)
- lorsque que je fais un retour sur la vue précédente (une tableViewController avec la liste des objets), que la cellule soit modifiée également avec l'ajout de l'icone
j'utilise ceci :
ensuite lors du clic que sur la modification de la quantité
puis je parse les données pour tenter de les mettre à jour mais cela ne fonctionne pas
BParser.bParsing(pID, Qty: self.sQty)
self.tableView.reloadData()
}
Merci de votre aide.
Bonjour,
C'est un peu dur de t'aider comme ça .
Si ton but est de voir la modification sur ton objet dans deux vues différentes, il suffit d'utiliser le même objet avec la même référence.
Exemple :
Sinon montre plus ton code pour voir comment tu fais et que les autres puissent t'aider plus précisément.
J'ai l'impression que tu as une relation 1 To 1 et je pense qu'il est plus judicieux d'opter pour les délégués par exemple.
Les lignes que tu mets à disposition sont placées ou très exactement ?
Pour rappel :
- TableViewController (liste des produits avec icone quantité sur la cellule) -> DetailViewController (détail complet du produit avec avec quantité également)
- Les données sont issues d'une API, pour mettre à jour la quantité je fais appel à une API et cela se passe dans le detailViewController
En réalité la mise à jour de la quantité fonctionne mais je suis obligé de reparser les données lorsque je fais retour sur la liste des produits TableViewController, c'est-à -dire lorsque je passe de DetailViewController (où je mets à jour la quantité) à TableViewController, ce que ne font pas la plupart des applications, c'est cela qui me gêne.
C'est un peu ce genre de demande :
http://stackoverflow.com/questions/13437136/how-to-update-masterviewcontroller-item-cell-from-detailviewcontroller
http://stackoverflow.com/questions/10578281/how-to-pass-data-back-from-detail-view-controller-to-uitableview
mais avec l'API au milieu !
Bonsoir,
J'y suis arrivé, enfin !
Je vais pouvoir avancer, certainement d'autres questions à venir...
Merci à tous.
Pour que les autres puissent profiter, s'il te plaà®t nous dire comment tu t'es arrivé ?
Oui alors j'ai créé une classe avec des méthodes dont une méthode qui parse mes données.
Dans DétailViewController, lors du clic sur Ajout dans le stock :
- je mets à jour la quantité (API)
- je fais appel à la méthode qui parse mes données
- j'envoie une notification par
Dans TableViewController, et plus particulièrement dans viewWillAppear, je récupère les données et je les recharge dans la tableView :
Dans viewDidLoad, je récupère la notification qui va me permettre d'effacer toutes les données de la tableView sinon on se retrouve avec le double de données car elles ont été chargées la première fois qu'on est passé sur TableViewController :
Merci.