2011-03-19 47 views
0

背景:爲什麼「numberOrRowsInSection」在「viewDidLoad」中途被調用?

  1. 在我的viewDidLoad我加載測試日曆數據(通過EventKit)到iPhone。我注意到,當表視圖加載第一次時,它不會看到這些數據。

  2. 當我看到日誌消息的順序我看到它是這樣的:

記錄在這裏:

[AppointmentListController viewDidLoad] Starting 
[AppointmentListController populateTestData] Populating the test data now 
[AppointmentListController tableView:numberOfRowsInSection:] Number of rows = 0 
[AppointmentListController viewDidLoad] Loading the existing calendar events 
[AppointmentListController viewDidLoad] Ending 

問題(S)

  • 爲什麼「numberOrRowsInSection」在「viewDidLoad」中途被調用?我問這是因爲這是我所看到的(這是什麼應該發生?)。

  • 如果這是正常的,你不能肯定的viewDidLoad將numberOrRowsInSection之前完成,那麼這將意味着你需要一個「[self.tableView reloadData]」你「的viewDidLoad」方法的末尾,以確保它更新?

回答

2

tableView:numberOfRowsInSection:方法可能調用,因爲你對你的表視圖配置的東西(maybed您已經將其添加到它的父),併爲此需要知道它的指標。它本身並沒有神奇地觸發藍色。請確保在配置UI元素之前準備好數據,或者在接近尾聲時調用reloadData,但我會發現前者更「清潔」。

+0

OK DarkDust - 這是確定設置UI元素在「viewDidLoad中」的方法,雖然不是嗎?在這種情況下,我認爲你在「viewDidLoad」中說,在點擊UI元素配置行之前先加載你的數據 - 我在這裏是否正確理解你? – Greg 2011-03-19 08:51:00

+0

是的,在'viewDidLoad'中設置和配置UI元素非常好。是的,你已經理解了正確的:在viewDidLoad方法中,首先設置非UI數據(只要它們不依賴UI元素中的數據),然後設置UI元素。這樣你就不需要自己調用'reloadData',它會在表視圖方便的時候被調用,從而防止不必要的方法調用。 – DarkDust 2011-03-19 08:56:40

0

這很正常....

Call [self.tableView reloadData] 

;在viewDidLoad中結束

相關問題