2016-08-22 3 views
2

私の質問は少し混乱するかもしれませんが、私はより良いタイトルを見つけることができませんでした。私は説明しましょう:私はCoreDataを使ってオブジェクトを保存し、永続化するiOS Appを開発しています。私はUITableViewに格納されたオブジェクトを表示したいと思います。すべてのオブジェクトにはの日付が含まれています。私は、私のテーブルビューにオブジェクトを日付でソートして表示し、毎月はそのテーブルビュー内のセクションにします。テーブルビューは、データが表示され前にあるどのように多くの行やセクションを知っている必要があるのでCoreDateまたはその他すべてから必要なデータのみを取得しますか?

+--------------------+ 
+--- March 2016 ---+ 
+--------------------+ 
+ - Entry 1   + 
+ - Entry 2   + 
+--------------------+ 
+-- February 2016 --+ 
+--------------------+ 
+ - Entry 1   + 
+ .....    + 
. 
. 
. 
. 
+--------------------+ 

は、私は私のCoreDataストレージ内であり、少なくともどのように多くのエントリを知る必要があります。

アプローチ1

私は、各オブジェクトの日付だけを取得し、それを表示するために持っているどのように多くの行をテーブルビューを伝えます。データソースメソッドcellForRowAtIndexPathが呼び出されると、私は必要なオブジェクトに対して正確にデータを取得します。 CoreDataはそれを実行するのに十分速いのですか、またはデータがロードされるまでユーザーはしばらく待たなければなりませんか?

アプローチ2

私はCoreDataストレージおよび「ストア」テーブルビューを保持している私のViewController内のオブジェクトからすべてを取得します。たぶん、すべての単一のオブジェクトをメモリに保持するためには、多くのメモリが必要になるかもしれません。

アプローチ3遅延ロード?)

私はCoreDataから最新の10-20オブジェクトを取得します。ユーザーがテーブルビューをスクロールダウンして最後のエントリに近づくと、次の10〜20エントリを取り出して表示します。最初に読み込んだエントリはどうですか?私はそれらを記憶に残すべきですか?または、ユーザーが上にスクロールした場合にもう一度それらをフェッチしますか?

私はそれに時間を無駄にしたくないし、自分ひとりひとりを試したいと思っています。あなたが私を助けてくれることを願っています。ありがとうございました!

+0

アプローチ3が最適です。オブジェクトがフェッチされると、それらをビューコントローラの変数配列に格納します。ユーザーがさらにフェッチしたら、配列を追加してテーブルをリロードします。 カウントが必要な場合にのみカウントを取得することもできますが、ここでは最適な方法ではない可能性があります。 –

+0

あなたは 'NSFetchedResultsController'を見ましたか? –

答えて

2

NSFetchedRequestControllerを使用してデータを取得し、必要に応じてNSPredicateを追加します。お楽しみください:-)

+0

ありがとう、それは私が必要とするものです! – beeef

0

NSFetchedResultsControlerを使用してください。この要件はすでにフレームワークでサポートされているため、リストされたオプションは正しく表示されません。何を取り出すのか心配する必要はありません。正しい構成を提供するだけで、すべてがフレームワークによって処理されます。

NSFetchedResultsControllerをインスタンス化するときは、sectionNameKeyPathパラメータを指定します。フェッチ結果は、この属性に基づいてグループ化されます。これは、レコードの月と年のように、計算された属性にすることができます。

関連する問題