1

エンティティがあり、特定の属性を取得したいと考えています。

例えば、

複数の属性を持つ Food というエンティティがあるとします。各食品の属性であるすべてのカテゴリを選択したいと考えています。Core Data でこれを達成するための最良の方法は何ですか?

4

3 に答える 3

1

フェッチ リクエストを実行してから、 を使用valueForKey:してすべての属性値を抽出するだけです。モデルに多数のオブジェクトが含まれている場合は、フェッチ制限とオフセット (およびソート記述子) を設定して項目をページングできます。これを行うときは、オブジェクトを障害として返さないようにフェッチ要求を設定する必要もあります。

代替手段があることを思い出しました。プロパティを取得するように設定してから、結果の型を NSDictionaryResultType に設定できます。繰り返しを行う必要がありますが、これにより、可能な限り最小限のデータが返されます。

于 2013-04-20T22:35:22.220 に答える
0

編集:あなたの質問を誤解したと思います。オブジェクト自体ではなく、オブジェクトのプロパティのみを取得したいようです (たとえば、エンティティではなく属性)。コアデータがそのように機能するとは思いません...上記の人が述べたように、データベースではなくオブジェクトグラフです。Core Data がどのように「障害」を起こし、依存オブジェクトが必要に応じて自動的に取得されるかを調査します。まだ適用される場合に備えて、以下のアドバイスを残しましたが、適用されるかどうかはわかりません.

特定の基準を満たすオブジェクトのみを取得するために、検索に述語を追加できます。これは、フェッチの「if」ステートメントのように機能します。Apple のドキュメントは次のとおりです。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class/Reference/NSPredicate.html

そしてチュートリアル: http://www.peterfriese.de/using-nspredicate-to-filter-data/

そうは言っても、必要性は、フェッチするオブジェクトの数によって異なります。パフォーマンス ヒットが発生していない場合は、不要なオブジェクトをいくつかフェッチしても問題があるとは限りません。問題を解決します。言い換えれば、うまく機能していたものを「最適化」しないでください。ただし、モデルに大量のオブジェクトが含まれている場合、それらすべてをフェッチするとコストがかかる可能性があるため、述語を使用する必要があります。

于 2013-04-20T23:12:18.400 に答える