我有一個應用程序UITableViewController
,最初只有一個單一的部分行(它說「加載...」)。它會獲取一些數據來自互聯網,此時它讓下面的調用:UITableView reloadSection會導致爲所有行調用cellForRowAtIndexPath
[tableView reloadSections:[NSIndexPath indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
這是必要的,因爲獲取數據後,有現在的很多行,而不僅僅是1有最初(所以問表視圖中可見單元格的列表的可能性也不大,因爲它只是返回1舊)
麻煩的是,它然後調用cellForRowAtIndexPath
委託方法每一行,不僅僅是可見的。我已經通過將一些日誌記錄放入方法來驗證。如果我將這一行切換到簡單的[tableView reloadData]
,那麼它只會在前幾行調用cellForRowAtIndexPath
,直到您滾動的點和其他人進入視野。這發生在我的iOS4 iPod Touch上,也發生在iOS5模擬器中。
我有大約300行,它使它非常緩慢加載,並通常在我的iPod Touch上崩潰。
我不是僅僅使用reloadData
的原因是我想添加新的行來動畫,而reloadData
只是讓它們突然出現。
我已經編輯了我的問題並加以澄清:'indexPathsForVisibleRows' isn這是一個選項,因爲底層數據已經改變,並且它只返回一箇舊的單元格(它不包括任何應該添加的新行) – andygeers 2012-04-24 15:39:41
okey,你是對的,不是一個選項然後;)但我想,如果你調用[NSIndexPath indexSetWithIndex:0],tableView必須加載所有單元格/數據,因爲tableView應該如何知道,如果末尾沒有任何數據段0你提供的數據。 – Quirin 2012-04-24 15:46:07
但是,如果是這樣的話,爲什麼'reloadData'足夠聰明以便正確? – andygeers 2012-04-24 15:47:16