2012-07-08 13 views
7

Ho un'applicazione basata su barra di schede con 3 schede (viste). Come dovrei, sia nel delegato dell'app che nella prima scheda che viene caricata, caricare l'intero contenuto delle altre 2 viste in background?Viste precariche iOS Objective C

In questo momento ho una vista Web in ciascuna delle visualizzazioni in questione. Parte del mio problema è che sono caricati nel viewDidLoad ma causano un'attesa con una schermata vuota

Grazie

risposta

8

La risposta non è così chiaro per me .. Così mi hai 3 UIViewController (o sottoclassi di loro) contenute in un UITabBarViewController, il modo per costringerli a caricare il loro punto di vista è chiamare la proprietà -view su ciascuno di loro in AppDelegate rich prima di aggiungere all'istanza UITabbarViewController. Qualcosa di simile a questo:

UIViewController * myViewController = [[UIViewController alloc] initWithNibName:@"mynib" bundle:nil]; 
[myViewController view];//<--here you are forcing the view to be loaded before it will be called from the tabbatviewcontroller 

Questo è un modo per evitare (non a tutti) i comportamenti si verificano ... concetti di carico in background sono molto più complicate.

7

prova a:

viewController.view.hidden = NO; 

per qualsiasi viewController si desidera pre-load e IT ha beeb allocato e inizializzato. Cioè, dopo alloc e initWithNibName: ... è stato fatto.

+0

Se ricordo bene, puoi effettivamente usare qualsiasi istruzione con 'viewController.view', e ottenere lo stesso effetto. Penso che la proprietà 'view' sia probabilmente implementata con il caricamento lazy, quindi non appena qualcuno cerca di farvi riferimento, si carica. – Nate

+4

Ma questo non richiede un "ritorno" quindi nessun avviso mostrato! :) –

+0

Questo è ancora più importante in Xcode 6 (almeno quando si usa Swift) che segnala un errore quando non si utilizza il valore di viewController.view. –

4

Io di solito uso qualcosa di simile:

if (vc.view == nil)  // force load of view 
{ 
    NSLog(@"%s ***** ERROR: view == nil: %@", __PRETTY_FUNCTION__, vc); 
} 

NOTA: Dopo aver chiamato vc.view, la vista dovrebbe mai essere pari a zero - che è una bella grave bug di allocazione.