Mise à jour de données entre différentes vues après modifications
Bonsoir à tous,
Je voudrais connaitre votre manière de faire lorsque vous êtes dans la situation que je vais vous présenter :
Je récupère des données d'un webservice sous format XML, notamment toutes les infos concernant un produit (nom, description, s'il est dans mon stock, si je le souhaite etc...)
Mon application est construite à partir du template Tabbed app, j'ai donc une rubrique accueil, recherche, produits et mon compte.
Mon problème :
Admettons que je sois dans la rubrique produit, je vois tous les produits affichés par l'intermédiaire d'une TableView avec nom, description mais pas si je l'ai dans mon stock ni si je souhaite l'avoir dans mon stock car je ne suis pas connecté.
Maintenant je bascule sur mon compte, je me connecte et je reviens dans la rubrique produit, je souhaiterais avoir les infos - si le produit est dans mon stock, si je le souhaite - qui s'affichent (je mets une petite icône pour ces infos). Comment vous procédez ?
A l'heure actuelle, je reparse les données à chaque fois dans viewWillAppear de la vue Produits, cela fonctionne mais le problème est que je voudrais éviter de trop solliciter le web service.
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
A première vue, il n'y a aucune raison de recharger les données à partir du web service. Une seule fois suffit. Tu devrais créer une classe de stockage pour archiver le résultat du parsage et s'y référer à chaque affichage de la vue produits. Cela évite de solliciter le web service, et accélère la vitesse de l'application, le téléchargement du XML et le parsage prenant forcément du temps.
Le plus simple est de construire un Singleton (un objet dont on ne peut pas avoir plus d'un) que l'on puisse accéder de n'importe où dans ton code.
e.g.
Maintenant, tu peux l'accéder comme :
Tout dépend des sdk que tu utilises actuellement mais pour moi, si c'est pour un usage immédiat sans persistence permanente, j'entends par là sans vouloir réutiliser la même réponse du web service après avoir tué l'application par exemple, je stockerais la réponse dans le disque.
Si on part de ce principe, on peut aussi dire que comme NSURLSession a un cache disque, autant relancer la requête. Vu qu'on va déjà se retaper le parsing du XML, on n'est plus à ça près.
D'ailleurs, du coup, il n'y a même peut-être plus besoin de régler le problème, puisque le serveur ne sera pas sollicité, grâce au cache.
[/ironie]
Voir ici:
http://forum.cocoacafe.fr/topic/15453-problème-de-mémoire-avec-la-carte/page-2#entry149818
Merci pour vos conseils,
en revanche si l'utilisateur met à jour son stock (par exemple en ajoutant un produit), cela se fait par une méthode de l'API, donc je suis bien obligé de recharger les données à un moment ?
Sinon j'ai pensé que je pouvais utiliser NotificationCenter, ça fonctionne, je recharge seulement après une mise à jour du stock, on m'en avait parlé ici sur ce forum.
Mais depuis que j'ai lu cet article :
https://davidnix.io/post/stop-using-nsnotificationcenter/
je ne sais pas si c'est bien ?
J'ai survolé l'article, mais il identifie bien les divers problèmes suscités par les notifications. En gros, le principal inconvénient est que les notifications sont globales. On a donc du mal à suivre les flux d'informations, et si ça change à un seul endroit, ça casse à d'autres qui n'ont pas un lien évident " et pire, à l'exécution, pas à la compilation.
Il n'y a rien de plus fiable que l'injection de dépendance. Ce n'est malheureusement pas toujours faisable avec Cocoa, et parfois, il faudra passer par des setters. Avec ces deux solutions, les passages de paramètres se font de proche en proche, aussi les flux d'informations sont limpides.
Merci Ceroce pour les explications.
Moi j'adore les protocoles : Tellement plus clair que les notifications
Les notifications ont souvent l'air de bidouilles, mais il se trouve qu'on a souvent besoin de bidouilles pour contourner les limitations du SDK. Il faut donc éviter d'y recourir pour les choses standard, mais ça rend service.