2012-01-10 16 views
7

Quando il codice con l'applicazione di navigazione iOS, ho affrontano con difficoltà questo:viewWillAppear vs viewDidLoad ios

dove posso mettere il "initdata" metodo per UITableView? in viewWillAppear o viewDidLoad?

per favore aiutatemi.

+0

Dipende da cosa si intende per dati di init. – Sulthan

+0

Qual è il tuo requisito. –

risposta

14

Si può mettere initdata secondo il vostro requisito della app,

se la tabella ha bisogno di caricare i dati ogni volta con i nuovi dati allora dovrebbe essere sotto

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    //initData 
} 

In caso contrario, se le esigenze di tabella per essere ricaricata da un unico dati che non varia o non c'è alcuna operazione di modifica eseguita su dati, è necessario utilizzare

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    //initData 
} 
+0

se inserisco il codice in entrambi i posti. Eseguirà quel codice 2 volte quando spingo questo TableView in un UInavigationcontroller – Clover03ti05

+0

Si dovrebbe posizionarlo solo in "viewwillAppear", come array in base al valore di modifica di child View.It funzionerà. –

+0

Non avviare mai i dati in viewWillAppear. A seconda del modo in cui si carica il controller di visualizzazione sullo schermo (in altri VC o in tutto il seguito), non può essere invocato affatto. –

2

e 'meglio chiamare che nel initWithNibName:bundle: o initWithCoder: e rilasciare i dati caricati in -(void)dealloc.

Inoltre, è possibile farlo in viewDidLoad e rilasciare i dati caricati in viewDidUnload. Ma è meglio evitare di chiamare che dal viewWillAppear:

Edit:

Spero tale matrice dipende dalla selezione nella vista padre. In tal caso, scrivere un metodo setter, che imposta la condizione e inizia i dati prima di premere il controller della vista.

DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
// Pass the selected object to the new view controller and depend on that, load the data. 
[detailViewController initData:(id)[_list objectAtIndex:indexPath.row]]; 
[self.navigationController pushViewController:detailViewController animated:YES]; 
[detailViewController release]; 
+0

nel mio caso, ho bisogno che un NSArray si prepari per uitableview. e valore di questo array in base al valore di modifica di Vista figlio. – Clover03ti05

+0

Ho modificato la mia risposta – Ilanchezhian

Problemi correlati