UIViewController viewDidLoad vs viewWillAppear: Quelle est la bonne division du travail?
J'ai toujours été un peu dans le flou sur le type de tâches que doit être attribué à viewDidLoad
vs viewWillAppear
: dans un UIViewController
sous-classe.
par exemple, je suis en train de faire une application où j'ai un UIViewController
sous-classe de frapper un serveur, l'obtention des données, l'alimentation à une vue, puis l'affichage de ce point de vue. Quels sont les avantages et les inconvénients de le faire dans viewDidLoad
vs viewWillAppear
?
Vous devez vous connecter pour publier un commentaire.
viewDidLoad, ce sont les choses que vous avez à faire une fois. viewWillAppear est appelée chaque fois que l'affichage s'affiche. Vous devez faire les choses que vous avez seulement à faire une fois dans le viewDidLoad - comme le réglage de votre UILabel textes. Toutefois, vous souhaiterez peut-être modifier une partie spécifique de la vue à chaque fois que l'utilisateur arrive à l'afficher, par exemple, l'iPod, l'application permet de faire défiler les paroles de retour vers le haut chaque fois que vous allez à la "Lecture en cours" voir.
Toutefois, lorsque vous chargez des choses à partir d'un serveur, vous devez également réfléchir à propos de la latence. Si vous regroupez l'ensemble de votre réseau de communication dans le viewDidLoad ou viewWillAppear, ils seront exécutées avant que l'utilisateur arrive à voir le point de vue - peut-être résultant d'un court de gel de votre application. Il peut être une bonne idée de montrer à l'utilisateur un vide de la vue avec un indicateur d'activité d'une certaine sorte. Lorsque vous avez terminé avec votre réseau, ce qui peut prendre une seconde ou deux (ou peut-être même l'échec - qui sait?), vous pouvez remplir la vue avec vos données. De bons exemples sur la façon dont cela pourrait être fait, peut être vu dans divers clients twitter. Par exemple, lorsque vous affichez l'auteur en page de détail de Twitterrific, la vue est dit que "Chargement..." jusqu'à ce que le réseau des requêtes terminées.
Initialement utilisé uniquement ViewDidLoad avec tableView. Sur les tests de perte de Wifi, par réglage de l'appareil en mode avion, ont réalisé que la table n'a pas d'actualiser avec le retour de la Wifi. En fait, il semble y avoir aucun moyen de l'actualisation tableView sur l'appareil, même en appuyant sur le bouton d'accueil avec mode d'arrière-plan définie sur OUI -Info.plist.
Ma solution:
Il est important de noter que l'utilisation viewDidLoad pour le positionnement est un peu risqué et devrait être évitée, car les limites ne sont pas définies. cela peut provoquer des résultats inattendus (j'ai eu une variété de questions...)
Ce post décrit assez bien les différentes méthodes et ce qui se passe dans chacun d'eux.
actuellement pour un temps d'initialisation et de positionnement, je suis en train de penser à l'aide de viewDidAppear avec un drapeau, si quelqu'un a une autre recommandation s'il vous plaît laissez-moi savoir.
Dépend, avez-vous besoin de données à charger chaque fois que vous ouvrez la vue? ou seulement une fois?
viewDidLoad:
Quel que soit le traitement que vous avez à faire une fois.viewWilLAppear:
Quel que soit le traitement qui doit changer à chaque fois que la page est chargée.Des étiquettes, des icônes, bouton de titres ou plus dataInputedByDeveloper généralement ne changent pas.
Des noms, des photos, des liens, bouton d'état, les listes (entrée Tableaux pour votre tableViews ou collectionView) ou plus dataInputedByUser généralement faire changer.
viewWillAppear
vous pouvez interroger et vérifier l'latests tweets.viewDidAppear
est trop tard pour que