UIViewController ViewDidLoad Vs. Viewwillappear: Wat is de juiste divisie van arbeid?

Ik ben altijd een beetje onduidelijk geweest op het type taken dat moet worden toegewezen aan viewDidLoadversus viewWillAppear: in een UIViewControllerSUBCLASS .

b.v. Ik doe een app waar ik een UIViewControllerSubclass heb met een server, het krijgen van gegevens, die het naar een weergave geven en vervolgens die weergave weergeven. Wat zijn de voor- en nadelen van dit doen in viewDidLoadversus viewWillAppear?


1, Autoriteit 100%

Viewdidload is dingen die je ooit moet doen. Viewwillappear wordt elke keer gebeld telkens wanneer de weergave wordt weergegeven. Je moet dingen doen die je maar één keer in ViewDidload – zoals het instellen van je Uilabel-teksten hoeft te doen. Misschien wilt u echter een specifiek onderdeel van het weergave wijzigen telkens wanneer de gebruiker deze krijgt, b.v. De iPod-applicatie scrolt de songteksten terug naar de bovenkant telkens wanneer u naar de weergave “Now Playing” gaat.

Wanneer u echter dingen van een server laadt, moet u ook nadenken over Latency. Als u al uw netwerkcommunicatie in ViewDidLoad of ViewWillPear inkt, worden ze uitgevoerd voordat de gebruiker de weergave krijgt – mogelijk resulterend in een korte bevriezen van uw app. Het is misschien een goed idee om eerst de gebruiker een niet-onberispelijke weergave te laten zien met een activiteitsindicator van een soort. Wanneer u klaar bent met uw netwerken, die een tweede of twee kunnen duren (of zelfs falen – wie weet u?), Kunt u het weergave met uw gegevens vullen. Goede voorbeelden over hoe dit kan worden gedaan, is te zien in verschillende Twitter-clients. Wanneer u bijvoorbeeld de pagina Auteur Detail bekijkt in TwitterRific, zegt de weergave alleen “Loading …” totdat de netwerkquery’s zijn voltooid.


2, Autoriteit 5%

Het is belangrijk op te merken dat het gebruik van viewdidload voor positionering een beetje riskant is en moet worden vermeden omdat de grenzen niet zijn ingesteld. Dit kan onverwachte resultaten veroorzaken (ik had een verscheidenheid aan problemen …)

Deze post beschrijft vrij goed de verschillende methoden en wat er in elk van hen gebeurt.

Momenteel voor eenmalige init en positionering denk ik aan het gebruik van ViewDidappear met een vlag, als iemand een andere aanbeveling heeft, laat het me weten.


3, Autoriteit 5%

In eerste instantie gebruikte alleen ViewDidload met tafelview. Bij het testen met verlies van WiFi, gerealiseerd door het instellen van het apparaat naar de vliegtuigmodus, besefte de tabel niet vernieuwd met de terugkeer van WiFi. In feite lijkt er geen manier te zijn om het tableview op het apparaat te vernieuwen, zelfs door de startknop te raken met de achtergrondmodus ingesteld op YES in -info.plist.

Mijn oplossing:

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

Other episodes