0

私はコアデータにそのようなデータ構造を持っています...

ユーザー

アイテム

カテゴリー

ユーザーは、Itemエンティティに対してtoMany関係「FavouriteItems」を持っています。カテゴリには、Itemエンティティに対してtoMany関係「Items」もあります。

ユーザーは、好きなカテゴリからお気に入りのアイテムを選択できます。現在、すべてのアイテムを一覧表示してから、カテゴリを横に表示しています。

私がやりたいのは、選択したカテゴリのすべてのユーザーのお気に入りアイテムを表示することです。

つまり、カテゴリxおよびユーザーyと関係のあるすべてのアイテムを選択します。

私は現在、1つの関係(つまりUser.favouriteItems)を介してすべてのアイテムを取得し、ブロック述語を使用してNSSetをフィルタリングすることによってこれを行っています。

単純なCoreData述語でこれを行うことは可能ですか?

うーん...それについて考えると、この作品のような述語になるでしょう...

[NSPredicate predicateWithFormat:@"interestedUser.id = %@ AND category.id = %@", user.id, category.id];

次に、アイテムエンティティでフェッチリクエストを実行しますか?

それはうまくいくでしょうか?

4

1 に答える 1

1

質問に答えるためだけに設定するのは厄介なシナリオなので、かなり盲目的に撮影しますが、おそらく

正しい逆関係が設定されているアイテムの配列をフィルタリングしている場合。

[NSPredicate predicateWithFormat:@"%@ IN interestedUsers AND %@ IN categories", 
                                 someUser, 
                                 someCategory];

基本的に にItemは多くのユーザー ( interestedUsers) が含まれているため、 がこのコレクションのユーザーであると言えます。

同様に、 にItemは多くのカテゴリ ( categories) があるためAND、このコレクションで選択したカテゴリは です。

于 2012-07-25T11:28:38.983 に答える