viewWillAppear中VS viewDidLoad中IOS

问题描述:

当与iOS导航应用程序代码中,我有麻烦面临着这样的:viewWillAppear中VS viewDidLoad中IOS

我在哪里可以把方法“initdata”为UITableView的?在viewWillAppear或viewDidLoad?

请帮我一把。

+0

这取决于你的初始数据是什么意思。 – Sulthan 2012-01-10 11:14:49

+0

你的要求是什么。 – 2012-01-10 11:21:48

你可以把initData按您的应用程序的需求,

,如果你的表需要用新的数据,每次加载数据,那么它应该是下

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

否则,如果该表需要由一个单一的数据不改变或没有对数据进行任何编辑操作可以重装,你应该使用

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

如果我把代码放在两个地方。它将运行该代码2次,当我推这个tableView到一个UInavigationcontroller – Clover03ti05 2012-01-12 04:33:49

+0

你应该把它放在“viewwillAppear”下,因为你的数组取决于子View的变化值。它会工作。 – 2012-01-12 04:55:45

+0

从不初始化viewWillAppear中的数据。根据您将视图控制器载入屏幕的方式(进入其他VC或整个赛段),可能根本不会调用它。 – 2014-11-05 12:58:44

这是更好地调用在initWithNibName:bundle:initWithCoder:方法并在-(void)dealloc中释放加载的数据。

此外,您可以在viewDidLoad中获得该版本,并在viewDidUnload中发布加载的数据。但最好是避免调用从viewWillAppear:

编辑:

我希望阵列取决于父视图中的选择。在这种情况下,编写一个setter方法,它在设置视图控制器之前设置条件并初始化数据。

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

在我的情况下,我有一个NSArray需要为uitableview做准备。以及该数组的值取决于子View的更改值。 – Clover03ti05 2012-01-12 04:31:52

+0

我编辑了我的答案 – Ilanchezhian 2012-01-12 05:43:40