0

UITableViewでNSFe​​tchedResultsControllerから20行だけを表示するのに苦労しています。

現在、UITableViewは、NSFetchedResultsControllerのオブジェクトからのすべてのデータを表示します。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[self.fetchedResultsController fetchedObjects] count];
}

私がやろうとしているのは、最初に20行を表示することです。次に、ユーザーが21行にスクロールすると、さらに20行が読み込まれます。ただし、その前に、tableViewの行を制限する方法を理解したいと思います。

私は周りを検索し、他の人からの提案を試しましたが、それでも理解が不足しています。私を光に導いてください...

4

4 に答える 4

2

NSFetchRequestと呼ばれるメソッドがありfetchLimitます。20に設定すると、20のみがフェッチされます。

そうは言っても、なぜあなたがあなたが説明したものが欲しいのか私にはよくわかりません。

于 2012-08-09T19:28:34.823 に答える
0

それ以外の:

return [[self.fetchedResultsController fetchedObjects] count];

使用する:

return (20 * X);

ここで、Xは、テーブルビューに結果を追加した回数であり、もちろん、CoreDataデータベースにあるレコードの数によっても制限されます。

ここでの秘訣は、UIの観点から、X増分への変更をトリガーする方法を決定することです。[insertRowsAtIndexPaths: withRowAnimation:]Xをインクリメントすると、UITableViewのメソッドを呼び出すことができます。

そしてもちろん、バッキングストアが現在テーブルに表示されているものと一致していることを確認する必要があります(これにより、iBlueの回答も非常に関連性が高くなります... + 1!)。

于 2012-08-09T19:29:12.983 に答える
0

fetchedObjects配列の数は、永続ストアからの変更を更新しないため、実行したいものではない可能性があります。NSFetchedResultsControllerのドキュメントから:

結果の配列には、フェッチ要求(fetchRequest)で指定され、その述語に一致するエンティティのインスタンスのみが含まれます。(フェッチ要求に述語がない場合、結果の配列には、フェッチ要求で指定されたエンティティのすべてのインスタンスが含まれます。)

結果の配列は、永続ストア内の状態ではなく、コントローラーの管理対象オブジェクトコンテキスト内の管理対象オブジェクトのメモリ内の状態を反映します。ただし、返された配列は、管理対象オブジェクトが挿入、変更、または削除されても更新されません。

20個のオブジェクトのみをフェッチする場合は、NSFetchRequestのフェッチ制限を設定します。20個のオブジェクトのみをメモリに保持する場合は、NSFetchRequestオブジェクトのsetBatchSizeを使用します。

于 2012-08-09T19:40:37.783 に答える
-1

この例を見てください-この実装には、更新するためのプルと、達成しようとしている「さらにロードする」効果が含まれています:)

https://github.com/shiki/STableViewController

于 2012-08-09T19:30:07.903 に答える