ios lifecycle - UIViewController viewDidLoad vs viewWillAppear:Quelle est la bonne division du travail?




order resume (5)

viewDidLoad est ce que vous devez faire une fois. viewWillAppear est appelée à 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 pouvez modifier une partie spécifique de la vue à chaque fois que l'utilisateur la voit, par exemple l'application iPod fait défiler les paroles vers le haut chaque fois que vous passez à la vue "Lecture en cours".

Cependant, lorsque vous chargez des choses à partir d'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 pourrait entraîner un blocage de votre application. Il peut être utile 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 de Twitter. Par exemple, lorsque vous affichez la page de détail de l'auteur dans Twitterrific, l'affichage indique uniquement «Chargement ...» jusqu'à ce que les requêtes réseau soient terminées.

J'ai toujours été un peu confus sur le type de tâches qui devraient être assignées à viewDidLoad vs viewWillAppear : dans une sous-classe UIViewController .

Par exemple, je suis en train de faire une application dans laquelle j'ai une sous-classe UIViewController frappe un serveur, qui UIViewController données, les UIViewController à une vue et affiche ensuite cette vue. Quels sont les avantages et les inconvénients de faire cela dans viewDidLoad vs viewWillAppear ?


Cela dépend, avez-vous besoin des données à charger chaque fois que vous ouvrez la vue? ou seulement une fois ?

  • Rouge: Ils ne nécessitent pas de changer à chaque fois. Une fois qu'ils sont chargés, ils restent comme ils étaient.
  • Violet: Ils doivent changer au fil du temps ou après chaque chargement. Vous ne voulez pas voir les mêmes 3 utilisateurs suggérés à suivre, il doit être rechargé chaque fois que vous revenez à l'écran. Leurs photos peuvent être mises à jour ... vous ne voulez pas voir une photo d'il y a 5 ans ...

viewDidLoad: Quel que soit le traitement que vous avez à faire une fois.
viewWilLAppear: Quel que soit le traitement à modifier chaque fois que la page est chargée.

Les étiquettes, les icônes, les titres de boutons ou la plupart des données de DataInByDeveloper ne changent généralement pas. Les noms, les photos, les liens, l'état des boutons, les listes (tableaux d'entrée pour votre tableViews ou collectionView) ou la plupart des dataInputedByUser changent généralement .


Initialement utilisé seulement ViewDidLoad avec tableView. Lors d'un test avec perte de Wifi, en mettant l'appareil en mode avion, on s'est rendu compte que la table ne s'est pas rafraichie avec le retour du Wifi. En fait, il semble qu'il n'y ait aucun moyen de rafraîchir 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:

-(void) viewWillAppear: (BOOL) animated { [self.tableView reloadData];}

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 provoquer 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'entre elles.

actuellement pour initialiser et positionner je pense à utiliser viewDidAppear avec un drapeau, si quelqu'un a d'autres recommandations s'il vous plaît faites le moi savoir.


Il est possible d'utiliser le développeur Apple Testflight (oui, Apple a acheté une société appelée Testflight et n'a pas renommé son service) pour distribuer des applications iOS sans avoir à gérer des UDID.

Test interne

Vous devez connaître les identifiants Apple ID des testeurs et il existe une limite stricte pour les postes de testeurs bêta disponibles par application. En 2016, on comptait 25 testeurs avec 10 appareils chacun. Vous devez attribuer des rôles d'administrateur ou de développeur aux testeurs.

Test externe

L'application doit passer le processus de révision et il y a une limite de 2000 utilisateurs.





ios uiviewcontroller viewdidload viewwillappear