16

Core Data 内にタスクのリストがあります。NSFetchedResultsController を使用して、それらを UITableView にフェッチします。

カスタムオーダーでカスタムセクションが必要です:

  1. 期限切れ
  2. アクティブ
  3. 進行中
  4. 遅らせた
  5. 完了しました

タスクがどのセクションに入る必要があるかを判断するために、相対オブジェクトの他の属性に基づいてその場で計算される派生一時属性を使用します。

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

なぜそれができないのか理解していますが、それでは問題の解決にはなりません!

私はもう試した:

  • NSFetchedResultsController をサブクラス化して、「セクションとインデックス タイトルの作成をカスタマイズ」します。たぶん私はこれを間違っているかもしれませんが、これはセクションの名前と順序を変更するだけであり、それらのセクションに入る数ではありません (これは重要です)。

  • セクションごとに配列を設定し、それらをテーブルに供給します (不格好で遅いですが、完全に機能します)。

  • 進行中および延期されたタスクをリッピングします (これは機能しますが、理想的ではありません)。このようにして、dueDate で並べ替え、一時的な値を介して sectionNameKeyPath を駆動できます。

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

前もって感謝します!

乾杯

4

1 に答える 1

11

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

これは冗長な情報を保存しているように聞こえますが、ロジックを単純にするだけでなく、アクセスを高速化するインデックス化も可能になります。

于 2012-05-14T16:35:19.483 に答える