0

ユーザーが属するグループに基づいて情報を制限するために、次のような CoreData モデルのデータ構造があります。

カテゴリ <->> 情報 <->> グループ。

UserGroups オブジェクトの NSSet があります。Group オブジェクトの NSSet に基づいてカテゴリをフィルタリングできるようにしたいと考えています。これにより、NSSet 内にグループを持つ情報がカテゴリに含まれていない場合、それらの情報が述語によって返されなくなります。

私ができる情報のために

[NSPredicate predicateWithFormat:@"ANY groups in (%@)",groups];

カテゴリについては、クラッシュのみで次のことを試しました。

[NSPredicate predicateWithFormat:@"ANY information.groups in (%@)",groups];

しかし、Category レベルで述語を記述する必要があります。私は、データ セット内の情報が十分に大きいため、すべてを取り出して処理してカテゴリを見つけることができないという前提でプログラミングを行っています。ユーザーのグループに基づいて、ユーザーに関連するカテゴリのみを取得する述語を作成したいと考えています。

ご協力いただきありがとうございます!

4

1 に答える 1

3

次のCategoryの述語が機能するはずです (それがCategoryからInformationinformationへの対多関係であると仮定します)。

[NSPredicate predicateWithFormat:@"SUBQUERY(information, $i, ANY $i.groups in %@).@count > 0",groups];

または、逆の関係を使用することもできます。

 // your set of Group objects:
 NSSet *groups = ...;
 // all Information objects that are related to any group object:
 NSSet *information = [groups valueForKey:@"information"] ;
 // all Category objects that are related to any information object:
 NSSet *categories = [information valueForKey:@"category"];

に組み合わせることができます

 NSSet *categories = [groups valueForKeyPath:@"information.category"];

この代替ソリューションの欠点は、メモリ内にグループの中間セットも作成されることです。

于 2013-02-08T06:14:51.110 に答える