2017-08-10 1 views
0

J'ai une page dynamique pur page1VC (qui est parent) où j'ai quelques boutons qui les amène à page2VC, page3VC, page4VCles meilleures pratiques pour charger la page sur le robinet de retour ou à proximité: Dans rapide 3

Il est bouton suivant et le bouton de retour dans chaque contrôleur de vue (pas de bouton de retour dans p1VC comme cela est parent)

Je peux accéder à tout viewController de tout autre c.-à-vc, de p1VC -> p2VC -> p4VC -> p3Vc

sur le robinet de retour dans un contrôleur de vue, qui me prend à p1VC

page1VC obtient toutes les informations à afficher de l'API et les stocke dans la variable p1APIInfo

Le robinet du bouton retour de page2VC ou page3VC ou page4VC -> cela devrait me prendre à page1VC

Ma question est: Comme mon page1VC est pure dynamique, au 1er atterrissage de cette page, je reçois toutes les infos de l'API Quand je navigue vers page4VC et sur le robinet de retour, il devrait me prendre à la page1VC et ici je ne veux pas que l'API soit appelée à tout moment lorsque l'utilisateur appuie sur le bouton

A partir de maintenant j'ai une variable fictive dans page1VC qui est la copie de la variable p1APIInfo (disons dummyAPIInfo)

Chaque fois que je tape suivant im passer cette variable à un autre VC, et à la pression de retour de ce VC im cette variable. Donc, fondamentalement, cette variable est de seulement transporter des données vers d'autres VC et le ramener à la page1VC sur le bouton "retour". Je n'utilise pas de données dans cette variable fictive dans page2VC/page3VC/page4VC

Cependant, cela fonctionne, mais ce n'est pas une bonne pratique.

Je peux penser à sauver mes données page1 dans userdefaults/singleton, mais je cherche une solution plus optimisation

pls suggèrent comment gérer

Donc, pour résumer: Je veux que mon appel API arrive qu'une seule fois à savoir , lors de l'atterrissage pour la 1ère fois .. après que chaque fois que l'utilisateur visite/appuyez sur le bouton de retour d'une autre page, j'ai besoin d'un moyen de ne pas appeler l'API. Il devrait utiliser les mêmes données que l'utilisateur reçoit lors de l'appel de la 1ère API.

J'espère que je suis clair avec ma question. Pls advice

Répondre

0

Assurez-vous de faire les appels dans une fonction qui n'est pas appelée plusieurs fois. Par exemple, si vos appels API sont dans la méthode viewWillAppear, vous ferez une récupération chaque fois que vous faites apparaître votre pile de navigation. Mettre les appels API dans viewDidLoad assurera que vos appels api ne se produisent qu'une seule fois.

Comme pour un moyen de transporter des données à la page1 ...

  • Vous pouvez créer un modèle personnalisé qui page1 repose sur, et injecter ce modèle à d'autres pages

  • Vous pouvez utiliser le modèle de la délégation de transmettre de retour d'informations

  • Vous pouvez utiliser les notifications et observateurs pour diffuser et prendre des mises à jour

  • Vous pouvez transmettre une référence de page1 à une autre page et autoriser d'autres pages à effectuer des mises à jour de la page1 en son nom

Les 4 stratégies sont viables, et dépendent vraiment de votre cas d'utilisation et de ce dont vous avez besoin dans votre application. Vous pourriez même utiliser un singleton. UserDefaults semble cependant être une mauvaise idée, puisque votre cas d'utilisation est de mettre à jour un modèle pour un contrôleur de vue.