0

コア データ モーダルに 、 、 の 3 つのエンティティがAありBますC。それぞれにcreatedAt日付があります。

createdAtエンティティの種類に関係なく、最新の日付にアクセスする最も簡単な方法は何ですか? 次のようなことができますか:

(注: fetchobjects... は、実行リクエストを実行するための簡単な方法です)

NSArray *allAs = [context fetchObjectsForEntityName:@"A"];
NSArray *allBs = [context fetchObjectsForEntityName:@"B"];
NSArray *allCs = [context fetchObjectsForEntityName:@"C"];

NSArray *allObjects = [[allAs arrayByAddingObjectsFromArray:allBs] arrayByAddingObjectsFromArray: allCs]

NSDate *latestDate = [allObjects valueForKeyPath:@"@max.createdAt"];

それとも、これは危険と見なされますか (属性の名前が異なるエンティティで同じであることに依存していることを考えると)。

4

1 に答える 1

1

最初のステップは最適化できます。各エンティティのすべてのオブジェクトをフェッチする代わりに、 (エンティティごとに)最新のcreateAt値のみをフェッチします。

  • で降順にソートするフェッチ要求にソート記述子を追加しますcreatedAt
  • fetchLimitを 1 に設定し、
  • を に設定resultTypeNSDictionaryType
  • を に設定propertiesToFetch@[@"createdAt"]ます。

利点は、すべてのオブジェクトをマネージド オブジェクト コンテキストにロードしてcreatedAt属性を取得するためにフォルトを発生させるのではなく、日付による並べ替えが SQLite レベルで行われることです。

そのallObjects場合、配列には 3 つの辞書 (エンティティごとに 1 つ) のみが含まれます。

于 2013-05-10T15:55:54.797 に答える