viewDidLoad ist etwas, was Sie einmal tun müssen. viewWillAppear wird jedes Mal aufgerufen, wenn die Ansicht angezeigt wird. Sie sollten Dinge tun, die Sie in viewDidLoad nur einmal tun müssen - wie das Festlegen Ihrer UILabel-Texte. Möglicherweise möchten Sie jedoch einen bestimmten Teil der Ansicht jedes Mal ändern, wenn der Benutzer sie anzeigt. Beispielsweise scrollt die iPod-Anwendung die Texte jedes Mal nach oben, wenn Sie zur Ansicht "Aktuelle Wiedergabe" wechseln.
Wenn Sie jedoch Dinge von einem Server laden, müssen Sie auch über die Latenz nachdenken. Wenn Sie Ihre gesamte Netzwerkkommunikation in viewDidLoad oder viewWillAppear packen, werden sie ausgeführt, bevor der Benutzer die Ansicht sehen kann - was möglicherweise zu einem kurzen Einfrieren Ihrer App führt. Es kann eine gute Idee sein, dem Benutzer zuerst eine nicht ausgefüllte Ansicht mit einer Aktivitätsanzeige anzuzeigen. Wenn Sie mit Ihrem Netzwerk fertig sind, was ein oder zwei Sekunden dauern kann (oder sogar fehlschlagen kann - wer weiß?), Können Sie die Ansicht mit Ihren Daten füllen. Gute Beispiele dafür finden sich in verschiedenen Twitter-Clients. Wenn Sie beispielsweise die Autorendetailseite in Twitterrific anzeigen, wird in der Ansicht nur "Laden ..." angezeigt, bis die Netzwerkabfragen abgeschlossen sind.
Anfangs nur ViewDidLoad mit tableView verwendet. Beim Testen mit Wifi-Verlust wurde durch Einstellen des Geräts in den Flugzeugmodus festgestellt, dass die Tabelle bei Rückkehr von Wifi nicht aktualisiert wurde. Tatsächlich scheint es keine Möglichkeit zu geben, tableView auf dem Gerät zu aktualisieren, selbst wenn Sie auf die Home-Schaltfläche klicken und der Hintergrundmodus in -Info.plist auf YES gesetzt ist.
Meine Lösung:
quelle
Es ist wichtig zu beachten, dass die Verwendung von viewDidLoad zur Positionierung etwas riskant ist und vermieden werden sollte, da die Grenzen nicht festgelegt sind. Dies kann zu unerwarteten Ergebnissen führen (ich hatte verschiedene Probleme ...)
Dieser Beitrag beschreibt recht gut die verschiedenen Methoden und was in jeder von ihnen passiert.
Derzeit für eine einmalige Initialisierung und Positionierung Ich denke darüber nach, viewDidAppear mit einem Flag zu verwenden. Wenn jemand eine andere Empfehlung hat, lass es mich bitte wissen.
quelle
Abhängig davon: Müssen die Daten bei jedem Öffnen der Ansicht geladen werden ? oder nur einmal ?
viewDidLoad:
Welche Verarbeitung Sie auch haben, diese muss einmal durchgeführt werden.viewWilLAppear:
Unabhängig von der Verarbeitung, die sich bei jedem Laden der Seite ändern muss.Beschriftungen, Symbole, Schaltflächentitel oder die meisten dataInputedByDeveloper ändern sich normalerweise nicht. Namen, Fotos, Links, Schaltflächenstatus, Listen (Eingabearrays für Ihre tableViews oder collectionView) oder die meisten dataInputedByUser ändern sich normalerweise .
quelle
viewWillAppear
Sie die neuesten Tweets abfragen und überprüfen.viewDidAppear