1

私は次のモデルを持っています:

  Entities:  Entity <----------->> SubEntity
++++++++++++++++++++++++++++++++++++++++++++++++
Attributes:  >name                 >uuid
             >identifier           >date

問題 #1: の取得リクエストがありEntitiesます。each 内dateのすべての最新のものでフェッチを並べ替えたい。どうすればいいですか?SubEntitiesEntity

問題 #2: さらに、フェッチ リクエストには返された辞書に and があり、プロパティand (その中のすべての最新のもの)resultType = NSDictionaryResultTypeを取得したいと考えています。それは可能ですか?namelatestDatedateSubEntitiesEntity

4

2 に答える 2

2

問題#1

NSSortDescriptorコレクション関係を使用してそれを行うことはできないと思います。サブクエリを実行できますが、オブジェクトをフィルタリングするだけです。それらはソートされません。

次のアプローチをお勧めします。

最初にSubEntity、それぞれの最新の日付 (最大) を選択しますEntity

NSArray *entities = ... // fetch here all your entities

NSMutableArray *result = [NSMutableArray array];
for (Entity *entity in entities) {
  SubEntity *max = [[entity subEntities] valueForKeyPath:@"@max.date"];
  if (max) [result addObject:max];
}

次に、単にresult配列を注文します。

id sort = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
result = [[result sortedArrayUsingDescriptors:@[sort]] mutableCopy];

SubEntity日付でソートされたオブジェクトのコレクションになります。Entityから直接アクセスできますSubEntity

問題#2

私の知る限り、そのようにすることはできません。上記のソリューションを使用して、これらの要素にアクセスできます。

于 2013-10-26T05:42:20.000 に答える
2

モデルを変更することをお勧めします。

の更新時にlatestDateプロパティを追加します。プロパティで、がこのオブジェクトの最新かどうかを確認し、それに応じて更新します。EntitySubEntityentitySubEntity dateEntity

これにより、単純なクエリで必要なことを達成できるようになり、フェッチされた結果コントローラーを使用してデータの変更を追跡できるようになります。

モデルを再構築できない場合は、@Michal K の回答を参照してください。ただし、すべてのオブジェクトEntitySubEntityオブジェクトをプリフェッチし (2 つのリクエスト)、そのアルゴリズムを使用してください。

于 2013-10-28T03:26:45.413 に答える