viewDidLoad to rzeczy, które musisz zrobić raz. ViewWillAppear jest wywoływana za każdym razem, gdy pojawia się widok. Powinieneś robić rzeczy, które musisz zrobić tylko raz w viewDidLoad - na przykład ustawianie tekstów UILabel. Możesz jednak chcieć zmodyfikować określoną część widoku za każdym razem, gdy użytkownik go zobaczy, np. Aplikacja iPoda przewija teksty z powrotem na górę za każdym razem, gdy przejdziesz do widoku „Teraz odtwarzane”.
Jednak kiedy ładujesz rzeczy z serwera, musisz również pomyśleć o opóźnieniu. Jeśli spakujesz całą komunikację sieciową do viewDidLoad lub viewWillAppear, zostaną one wykonane, zanim użytkownik zobaczy widok - może to spowodować krótkie zawieszenie aplikacji. Dobrym pomysłem może być najpierw pokazanie użytkownikowi niezamieszkałego widoku z jakimś wskaźnikiem aktywności. Po zakończeniu pracy w sieci, co może zająć sekundę lub dwie (lub może nawet zawieść - kto wie?), Możesz wypełnić widok swoimi danymi. Dobre przykłady tego, jak można to zrobić, można zobaczyć w różnych klientach Twittera. Na przykład, gdy przeglądasz stronę szczegółów autora w serwisie Twitterrific, widok mówi tylko „Ładowanie ...”, dopóki zapytania sieciowe nie zostaną zakończone.
Początkowo używany tylko ViewDidLoad z tableView. Podczas testów z utratą Wi-Fi, ustawiając urządzenie w trybie samolotowym, zdałem sobie sprawę, że stół nie odświeżył się po powrocie Wi-Fi. W rzeczywistości wydaje się, że nie ma sposobu, aby odświeżyć tableView na urządzeniu, nawet naciskając przycisk home z trybem tła ustawionym na TAK w -Info.plist.
Moje rozwiązanie:
źródło
Należy zauważyć, że używanie viewDidLoad do pozycjonowania jest nieco ryzykowne i należy go unikać, ponieważ granice nie są ustawione. może to spowodować nieoczekiwane rezultaty (miałem różne problemy ...)
Ten post dość dobrze opisuje różne metody i to, co dzieje się w każdej z nich.
obecnie do jednorazowego initowania i pozycjonowania myślę o użyciu viewDidAppear z flagą, jeśli ktoś ma jakieś inne zalecenia, daj mi znać.
źródło
Zależy, czy chcesz, aby dane były ładowane za każdym razem, gdy otwierasz widok? czy tylko raz ?
viewDidLoad:
Cokolwiek masz do przetworzenia, musisz to zrobić raz.viewWilLAppear:
Niezależnie od przetwarzania, które musi się zmieniać za każdym razem, gdy strona jest ładowana.Etykiety, ikony, tytuły przycisków lub większość danychInputedByDeveloper zwykle się nie zmienia. Nazwy, zdjęcia, linki, stan przycisków, listy (tablice wejściowe dla tableViews lub collectionView) lub większość dataInputedByUser zwykle się zmienia.
źródło
viewWillAppear
że możesz zapytać i sprawdzić najnowsze tweety.viewDidAppear
jest na to za późno