2012-01-10 49 views
7

當與iOS導航應用程序代碼中,我有麻煩面臨着這樣的:viewWillAppear中VS viewDidLoad中IOS

我在哪裏可以把方法「initdata」爲UITableView的?在viewWillAppear或viewDidLoad?

請幫我一把。

+0

這取決於你的初始數據是什麼意思。 – Sulthan 2012-01-10 11:14:49

+0

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

回答

14

你可以把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

2

這是更好地調用在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

相關問題