2

フェッチ要求を行う必要がありますが、要求に必要な NSPredicate がよくわかりません。シナリオは次のとおりです。

Listエンティティがあり、オブジェクトlistは一連のオブジェクトに対して対多の関係にありRequestます。各Requestオブジェクトには、一連のTagsオブジェクトと対多の関係があります。

エンティティに対してフェッチ リクエストを実行する必要がありますが、呼び出しTagsの対象がわかりません。特定のリストのすべてのリクエストのすべてのタグにあるNSPredicateのみを引き出したいと思います。tags

これが私が試したことです:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag in ANY list.requests.tags"];

しかし、私はこれが正しくないことを知っています。私は自分のリストを指定することができず、 もlist.requests返します。また、セットNSSetで行うことはできません.tags。私はかなり立ち往生しています。

役立つ場合に備えて、関係の写真を添付し​​ました。

ここに画像の説明を入力

4

1 に答える 1

2

サブクエリを作成します。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(requests, $request, $request.list = %@).@count > 0", list];

これは、指定されたリストを持つリクエストをカウントします。カウントが複数の場合、タグが取得されます。

次のこともできます。

[list.requests valueForKeyPath:@"tags.@distinctUnionOfSets"]

これは、キーと値のコーディングを使用して、すべてのリクエストに属するすべてのタグを取得し、それらをセットに統合します。この方法は、前者よりも効率が悪いです。

于 2013-04-10T18:16:58.923 に答える