2012-04-10 3 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]; 

このpostGrand Central DispatchNSThreadのような他の、より複雑な、カスタマイズ可能なオプションのいくつかを言及:しようとする最初の事はそれが何かを改善されるかどうかを確認するための最も簡単なオプションです。

+0

改善点は?細胞を描く必要がある場合は、それを即座に描く必要があります。だから、すべての踏み板にゆっくりとメソッドを呼び出すと、何も結果は出ませしかし参照のおかげです。 – Oleg

+0

@Olegそれはすぐに細胞を描き、その内容は後で埋められるでしょう。 – GregularExpressions

+0

ほんとうに面白いです。今すぐ試してみるよ。 – Oleg

2

大量のデータを使用している場合は、Core-dataに保存してください。NSFetchedResultsControllerを使用してtableViewを作成することをおすすめします。

&は、あなたのtableViewと結びついて主にあなたのtableViewをより速く生成し、高性能にするために作られています。

NSFetchedResultsControllerのドキュメントへのリンクです。

+0

今、私はcoredataを使用していません。だから 'NSFetchResultsController'は役に立たない。 – Oleg

+0

データソースはどれくらいですか? – Legolas

+0

かなり大きいです。 – Oleg

-1

そのためにuがテーブルセルのインデックス値に基づいて、新しいデータをロードすることができます

あなたはそのセルsは、現在で検討されているに依存するため、ロードしたいどのくらいの新しいデータのための条件を入れることができますユーザー。