2012-05-07 6 views
16

私はコアデータ内にタスクのリストを持っています。私はそれらをNSFetchedResultsControllerを使ってUITableViewに取り込みます。一時的なsectionNameKeyPathとNSSortDescriptor NSFetchedResultsController

私はカスタムオーダーでカスタムセクションを必要とする:延期

  1. OVERDUE
  2. ACTIVE
  3. 進行中の
  4. は、タスクが行くべきかのセクションを判断するには

を完了しました私はtで計算された導出された一時的な属性を使用しています彼は相対的なオブジェクトの他の属性に基づいて飛ぶ。

残念ながら、フェッチ要求で使用されるソート記述子として派生値を渡すことはできません。これは、フェッチでは、フェッチするように依頼されているデータをすでに持っているためです。チキン&卵。

私はそれができない理由を理解していますが、それは私が問題を解決するのに役立ちません!

私が試してみた:

  • サブクラスNSFetchedResultsController 'をcustomise creation of sections and index titles' に。たぶん私はこれを間違ってやっているかもしれませんが、これはちょうどセクションの名前と順序を変えます。

  • セクションごとに配列を配置し、それらをテーブルに供給します(clunky、 はまだ完全に動作します)。

  • 実行中の&のタスクを削除します(これは機能しますが、理想的ではありません)。こうすることで、私はdueDateでソートして、一時値を使ってsectionNameKeyPathを駆動することができます。

もっと良いアイデアはありますか?すでにこのような質問がいくつかありますが、どれもきちんとした解決策にはなりません。

ありがとうございます!

乾杯

+3

コアデータからすべてのタスクを既にフェッチしている場合は、タスクごとに余分な属性を保存することができます。また、「オンザフライ」のタスクがセクションを変更した場合、コアデータで更新することもできます - アニメーションは、controllerWillChangeContentによって正しいセクションに再配置されます:デリゲートメソッド?または私は何かを逃していますか? –

答えて

10

最も簡単な解決策は、永続的な 'セクションに属性を追加(または既存の一時属性を変換)することです。ソート可能な値のセットにします(これは、実行時に必要な名前を使用して表示されます)。レコードを更新するたびに、セクション属性も再計算して保存します。

冗長な情報を保存しているように思えますが、ロジックを単純化するだけでなく、インデックスを作成してアクセスを高速化します。

+0

こんにちはデニス、ご返信ありがとうございます。日付を変更するとアイテムが別のセクションに移動するため、セクション属性を効率的にチェック/変更する方法がわかりますか? – Timbo

+0

この回答+私の質問に対するGuntis Treulandsのコメントは素晴らしい:) – Timbo

関連する問題