162 votes

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 une sous-classe UIViewController. 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 le viewDidLoad vs viewWillAppear?

Merci à l'avance.

Cheers, Doug

249voto

LeonBrussels Points 1371

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".

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 ont terminé.

Espérons que vous avez aidé un peu,

Leon

12voto

Jaminyah Points 39

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:

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

10voto

keisar Points 943

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X