2009-06-11 17 views
6

In una delle visualizzazioni che lancio a livello di codice, vedo 5 chiamate diverse a 'loadView/viewdidLoad' ma non capisco perché molti vengono chiamati. Qualcuno può spiegarmi i meccanismi dietro questo?Chiamate multiple a viewDidLoad/loadView

mi lancio la vista nel genitore UIViewController (parte di un'applicazione TabBar + NavigationBar) esempio nel modo seguente:

MainEditController *editController = [[MainEditController alloc] initWithNibName:@"MainEditView" bundle:nil];   
[self.navigationController pushViewController:editController animated:YES];   
[editController release]; 

ho quindi accedere MainEditController'sviewDidLoad e loadView metodi (e invocando i loro rispettivi metodi di super) .

Il 'MainEditView' pennino contiene 3 articoli: del -File proprietario (di tipo MainEditController), -Prima risponditore (di tipo UIResponder) -View (di tipo UIView)

L'uscita è collegata a vista il proprietario del file e la vista non hanno elementi in esso. Quello che intendo fare è aggiungere diverse viste secondarie alla vista principale e visualizzare una delle sottoview basate su una condizione specifica.

Ho pensato che sia viewDidLoad sia loadView sarebbero stati chiamati come numero di visualizzazioni (1 in questo caso) all'interno del controller, ma ciò non sembra essere un'ipotesi valida.

+0

C'è qualche possibilità di pubblicare la funzione loadView di MainEditController? – marcc

risposta

14

Il tuo metodo loadView chiama [super loadView]? In caso contrario, è probabile che la proprietà della vista non venga impostata correttamente e, quindi, al successivo accesso allo time .view, tenta di caricarlo di nuovo.

Stab in the dark, ma senza il metodo loadView, è difficile restringere quale potrebbe essere il problema.

+6

la documentazione per gli stati loadView: l'implementazione personalizzata di questo metodo non deve chiamare super. –

+0

Era su Google e la tua risposta ha risolto il mio problema :) Grazie. – tarnfeld

+0

Grazie! Non riuscivo a capire cosa stava succedendo finchè non ho fatto il debug e ho capito che questo metodo stava chiamando all'infinito. –

6

Non sono sicuro se questo è ciò che state vedendo, ma un controller di navigazione rilascerà viste che non sono attualmente visibili per recuperare la memoria se l'app riceve un avviso di memoria insufficiente. Quando la vista diventa nuovamente visibile, viene ricreata la vista, che chiama loadView.

0

Impostare la proprietà di visualizzazione del controller di visualizzazione su una vista valida.

1

Risolvo lo stesso problema rimuovendo il metodo -(void)loadView. Se si crea UIViewController senza il file pennino, questo metodo verrà automaticamente aggiunto al codice.

Problemi correlati