次のように、コア データ テーブル t で group by を使用する概念的な SQL クエリがあります。
a, b, sum(c) a, b による t グループから c_sum を選択します。
コア データを使用してクエリを実行できます (スレッドGROUP BY with SUM() using Core Data で説明されているように)。NSFetchedResultsController を使用したいと思います。私は次のことを試しました:
「更新」操作で、上記のグループに対応するフェッチ リクエストをクエリで直接使用しようとしましたが、「NSFetchedResultsController は、NSDictionaryResultType を使用した変更追跡とフェッチ リクエストの両方をサポートしていません」という問題に遭遇しました。
そこで次のことを考えました。レコードをテーブル t に保存します。次に、上記のクエリを実行し、結果を別のテーブル t1 に保存します。nsfetchedresultscontroller を t1 からの通常のフェッチに結び付けます。残念ながら、この場合、ドキュメントの保存操作が非同期であるため、クエリによるグループ化ではデータベースに何も表示されないという問題が発生します。
上記の問題に対処するために、テーブル t に挿入した直後にドキュメントを保存しようとしましたが、「この NSPersistentStoreCoordinator には永続ストアがありません。保存操作を実行できません。」というエラーが表示されました。
明らかな代替手段は、プログラムでグループ化して合計し、データを t1 に挿入することです。まだ試していない 2 番目の方法は、ドキュメントの保存通知をリッスンしてから、t1 に挿入することです。もう 1 つの方法は、nsfetchedresultscontroller を使用しないことです。これは避けたいと思います。
考え?
ありがとう!
UPDATE : OK 保存通知を検出し、次に grouped by クエリを使用して t から t1 を入力することは機能しますが、次の理由から、適切な解決策ではありません。これは明らかに良い考えではありません。