2012-01-10 3 views
7

Lorsque le code avec l'application de navigation iOS, j'ai du mal à face avec ceci:viewWillAppear vs viewDidLoad ios

où je peux mettre la méthode "initdata" pour UITableView? dans viewWillAppear ou viewDidLoad?

aidez-moi s'il vous plaît.

+0

Cela dépend de ce que vous entendez par données init. – Sulthan

+0

Quelle est votre exigence. –

Répondre

14

Vous pouvez mettre InitData selon vos besoins de l'application,

si votre table a besoin de charger des données à chaque fois que de nouvelles données, alors il devrait être sous

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

Sinon, si les besoins de table à recharger par une seule donnée qui ne varie pas ou il n'y a aucune opération d'édition effectuée sur les données, vous devez utiliser

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

si je mets le code à la fois place. Il va exécuter ce code 2 fois quand je pousse ce tableView dans un UInavigationcontroller – Clover03ti05

+0

Vous devez le placer sous "viewwillAppear" seulement, comme votre tableau en fonction de la valeur de modification de l'enfant View.It fonctionnera. –

+0

Ne jamais init des données dans viewWillAppear. En fonction de la manière dont vous chargez le contrôleur de vue dans l'écran (dans d'autres VC ou dans les segments), il ne peut pas être invoqué du tout. –

2

Il est préférable d'appeler en initWithNibName:bundle: ou initWithCoder: et libérer les données chargées dans -(void)dealloc.

En outre, vous pouvez avoir cela dans viewDidLoad et libérer les données chargées dans viewDidUnload. Mais il vaut mieux éviter d'appeler que de viewWillAppear:

Edit:

J'espère que ce tableau dépend de la sélection dans la vue parent. Dans ce cas, écrivez une méthode setter, qui définit la condition et init les données avant de pousser le contrôleur de vue.

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

dans mon cas, j'ai un NSArray besoin de se préparer pour uitableview. et la valeur de ce tableau en fonction de la valeur de modification de la vue enfant. – Clover03ti05

+0

J'ai modifié ma réponse – Ilanchezhian

Questions connexes