「Category」というエンティティがあるモデルがあります。このカテゴリには、「製品」と呼ばれる1対多の関係があります。製品なしでCategoryエンティティのみを取得するようにフェッチ要求を設定するにはどうすればよいですか?
2 に答える
に対してクエリを実行するとCategory
、製品要素が障害としてロードされます。これはCoreDataのデフォルトの動作です。
逆に、を使用すると、リクエストの実行時に製品- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys
をロード(プリフェッチ)できます。
障害が発生すると、アプリケーションが消費するメモリの量が減少します。障害とは、まだ完全には実現されていない管理対象オブジェクトを表すプレースホルダーオブジェクト、または関係を表すコレクションオブジェクトです。
管理対象オブジェクトの障害は適切なクラスのインスタンスですが、その永続変数はまだ初期化されていません。リレーションシップフォールトは、リレーションシップを表すコレクションクラスのサブクラスです。障害が発生すると、CoreDataはオブジェクトグラフに境界を設定できます。障害が認識されないため、管理対象オブジェクトの障害はメモリの消費量が少なくなり、障害に関連する管理対象オブジェクトをメモリに表示する必要はまったくありません。
と
プリフェッチは、事実上、バッチフォールトの特殊なケースであり、別のフェッチの直後に実行されます。プリフェッチの背後にある考え方は、将来のニーズを予測することです。一部のオブジェクトをフェッチすると、すぐに、障害によって表される可能性のある関連オブジェクトも必要になることがわかります。個々のフォールトの発生の非効率性を回避するために、宛先でオブジェクトをプリフェッチできます。
編集
特定のカテゴリの製品の数を数える必要がある場合は- (NSUInteger)countForFetchRequest:(NSFetchRequest *)request error:(NSError **)error
、次のようなリクエストを使用して使用してください。
NSFetchRequest* request = // set up a request for Products
[request setPredicate:[NSPredicate predicateWithFormat:@"toCategory == %@", currentCategory]];
// count for fetch request here...
ここで、はからtoCategory
の逆の関係であり、はあなたが持っているカテゴリです。Products
Category
currentCategory
NSFetchRequestのドキュメントをご覧ください
'includeSubentities'および'returnsObjectsAsFaults'を設定して、モデル(製品)でCoreDataから返されるデータを制限できます。