7

NSFetchRequestエンティティ別の結果をグループ化したい。エンティティはすべて同じ抽象的な親を共有します。例えば:

animal
|
|-cat
|
|-dog

NSFetchRequestincludesSubentities設定され、TRUEentity設定されましたanimalsectionNameKeyPathNSFetchedResultsController をに設定することはできますが、 が格納された属性 (つまり、クラスのメソッドではなくデータベース内のデータ) に適用されるため、の でentity.name同じことを行うことはできません。したがって、エンティティ タイプ別にグループ化する唯一の方法は、サブクラスが自身を識別するために使用できる属性をスーパークラスに追加することです。sortDescriptorsNSFetchRequestsortDescriptors

これは、継承の有用性を損なうため、クレイジーに思えます。SQLite データベースを調べたところ、エンティティ タイプは属性と同じテーブルに格納されているため、必要なデータは既に配置されています。

要約すると、NSFetchRequest追加の属性を追加せずにサブクラスでソートすることは可能ですか?

4

1 に答える 1

2

答えはノーだと思います。

フェッチと並べ替えはストア (SQLLite ストアの場合) で行われるため、属性はデータ モデルの一部である必要があります。コア データ プログラミング ガイド (永続ストア機能) から:

フェッチとストアのタイプの間には、いくつかの相互作用があります。XML、バイナリ、およびメモリ内ストアでは、NSString の比較メソッドを含む Cocoa のすべての機能にアクセスして、述語およびソート記述子の評価が Objective-C で実行されます。一方、SQL ストアは述語とソート記述子を SQL にコンパイルし、データベース自体で結果を評価します。これは主にパフォーマンスのために行われますが、評価が非 Cocoa 環境で行われることを意味するため、Cocoa に依存するソート記述子 (または述語) は機能しません。

また

さらに、SQLite ストアを使用して一時的なプロパティを並べ替えることができません。

于 2011-09-19T12:01:49.073 に答える