2012-04-10 116 views
4

我需要在我的UITableView中實現某種延遲加載。UITableView延遲加載單元格數據

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //... some initializations here 

    //this is a function that pulls my cell data using helper class 
    NSData *cellData=[MyDataClass dataForCellAtIndexPath:indexpath.row]; 

    //... here I populate pulled data to cell 

    return cell; 
} 

一切都很正常,但滾動視圖不順利,因爲dataForCellAtIndexPath方法是緩慢的。所以我需要通過調用這個方法來將懶惰的填充數據實現到單元格中。我期望的結果是表格視圖將平滑滾動,但單元格的內容將在單元格繪製後填充一點。請幫助我,該怎麼辦?

回答

3

是的,你可以看看推動你的數據收集到後臺線程。嘗試的第一件事就是看它是否提高什麼最簡單的選擇:

[MyDataClass performSelectorInBackground:@selector(dataForCellAtIndexPath:) withObject:indexpath.row]; 

post提到一些其他更復雜的,可定製的一樣Grand Central DispatchNSThread選項。

+0

它會改進什麼?如果需要繪製細胞,應該馬上繪製。所以在每一步中調用慢速方法都不會導致任何結果但是,謝謝參考 – Oleg 2012-04-11 05:30:33

+0

@Oleg它將允許立即繪製單元格並在之後填充其內容。 – GregularExpressions 2012-04-11 07:24:22

+0

嗯..有趣。我現在就試試。 – Oleg 2012-04-11 12:07:36

2

如果您使用的數據量很大,我建議將它們保存到Core-data和/或使用NSFetchedResultsController填充您的tableView。

它已被創建&與你的tableView綁定主要是爲了填充你的tableView更快,並具有很高的性能。

以下是NSFetchedResultsController文檔的鏈接!

+0

現在,我沒有使用coredata。所以'NSFetchResultsController'沒用。 – Oleg 2012-04-11 05:26:06

+0

你的數據源有多大? – Legolas 2012-04-11 06:09:56

+0

這是相當大的。 – Oleg 2012-04-11 12:07:28

-1

爲u可以加載表格單元格的索引值的基礎上,新的數據

你可以把條件你要多少新的數據加載,因爲它取決於哪個小區S目前由檢查用戶。