viewDidLoad est des choses que vous devez faire une fois. viewWillAppear est appelé à chaque fois que la vue apparaît. Vous devriez faire des choses que vous n'avez à faire qu'une seule fois dans viewDidLoad - comme définir vos textes UILabel. Cependant, vous voudrez peut-être modifier une partie spécifique de la vue à chaque fois que l'utilisateur peut la voir, par exemple, l'application iPod fait défiler les paroles vers le haut à chaque fois que vous accédez à la vue "Lecture en cours".
Cependant, lorsque vous chargez des éléments depuis un serveur, vous devez également penser à la latence. Si vous regroupez toutes vos communications réseau dans viewDidLoad ou viewWillAppear, elles seront exécutées avant que l'utilisateur ne puisse voir la vue, ce qui peut entraîner un court gel de votre application. Il peut être judicieux de montrer d'abord à l'utilisateur une vue non peuplée avec un indicateur d'activité quelconque. Lorsque vous avez terminé votre mise en réseau, ce qui peut prendre une seconde ou deux (ou peut même échouer - qui sait?), Vous pouvez remplir la vue avec vos données. De bons exemples sur la façon dont cela pourrait être fait peuvent être vus dans divers clients Twitter. Par exemple, lorsque vous affichez la page de détails de l'auteur dans Twitterrific, la vue indique uniquement "Chargement ..." jusqu'à ce que les requêtes réseau soient terminées.
Initialement utilisé uniquement ViewDidLoad avec tableView. Lors des tests avec perte de Wifi, en mettant l'appareil en mode avion, on s'est rendu compte que la table ne s'actualisait pas avec le retour du Wifi. En fait, il ne semble y avoir aucun moyen d'actualiser tableView sur l'appareil, même en appuyant sur le bouton d'accueil avec le mode d'arrière-plan défini sur OUI dans -Info.plist.
Ma solution:
la source
Il est important de noter que l'utilisation de viewDidLoad pour le positionnement est un peu risquée et doit être évitée car les limites ne sont pas définies. cela peut entraîner des résultats inattendus (j'ai eu une variété de problèmes ...)
Cet article décrit assez bien les différentes méthodes et ce qui se passe dans chacune d'elles.
actuellement pour une initialisation et un positionnement ponctuels, je pense utiliser viewDidAppear avec un drapeau, si quelqu'un a une autre recommandation, veuillez me le faire savoir.
la source
Cela dépend, avez-vous besoin que les données soient chargées à chaque fois que vous ouvrez la vue? ou une seule fois ?
viewDidLoad:
Quel que soit le traitement que vous avez, il doit être effectué une fois.viewWilLAppear:
Quel que soit le traitement qui doit changer chaque fois que la page est chargée.Les étiquettes, les icônes, les titres des boutons ou la plupart des donnéesInputedByDeveloper ne changent généralement pas. Les noms, photos, liens, état des boutons, listes (tableaux d'entrée pour votre tableViews ou collectionView) ou la plupart des donnéesInputedByUser changent généralement .
la source
viewWillAppear
vous pouvez interroger et vérifier les derniers tweets.viewDidAppear
il est trop tard pour ça