2012-02-13 6 views
0

に参加:私はアイテムを取得したいのnの関係NSPredicate:私は1とcoredataデータモデルを持っているオブジェクトまたはオブジェクトID

Entity Item 
Tag *tag; 
.... 

Entity Tag 
NSString *name; 

、魔女は、タグに関係を持っています。 次の作品は:

Tag *selectedTag = ..... 
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Item"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag.name = %@", selectedTag.name]; 

問題があり、同じ名前を持つ複数のタグがあるcoud。 これらの項目はフェッチしないでください。

直接オブジェクト(selectedTag)を直接比較することも、少なくともidと比較することもできます。

両方:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag == %@", selectedTag]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[tag objectID] == %@", [selectedTag objectID] ]; 

は動作しません。

ありがとうございます。

答えて

1

タグの逆の関係が必要なようです。

fooがtagMemberと呼ばれるタグに対1の関係を持っている場合は、fooへのタグの対多の関係となっている逆にあなたが希望、tagMember選択したタグであるすべてのFOOSのセットを取得し、その後、fooMembersと呼ばれます

NSSet *setOfFoos = selectedTag.fooMembers; 

それとも、あなたがタグのサブクラスを設定していないので、ドット構文を使用することはできません、あなたがこれを行うならば:

NSSet *setOfFoos = [selectedTag valueForKey:@"fooMembers"]; 

(つまり、以来、これを行いますあなたはすでに私が持っているアイテムを持っていますあなたが探しているオブジェクトに関連している場合、フェッチを実行するのではなく、そのオブジェクトからオブジェクトを直接取得することができます)。

+0

この「クエリ」のNSPredicateはどのように見えますか?タグを取得して関係をナビゲートするよりも、私は望んでいません。他の方法はありませんか? – mica

+0

明確にするには:TableViewでNSFe​​tchedResultsControllerを使用したいと思います。セット全体を記憶に入れるよりも、たくさんのアイテムの方が良いのではないでしょうか? – mica

+0

テーブルを表示する前にテーブルを生成するために、fetchedResultsControllerをfetchRequestで初期化します。そのフェッチで特定のオブジェクトIDを要求することはほとんどありません。一度にいくつかのタグだけをテーブルに入れる場合は、 'tag.name ==%@'のような述語を使うことができます。 FRCクラスのリファレンス「フェッチ要求の変更」を参照してください。テーブルが起動して実行され、ユーザーがタグを選択すると、テーブル代理メソッドから選択したタグを取得できます。その時点で別のフェッチは必要ありません。 – Wienke

0

親との関係を持つ特定のエンティティでは、子エンティティ自体

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag == %@", selectedTag]; 

この述語を親エンティティのNSFetchRequestに適用します。 1:nの関係の場合、0または1の親エンティティを含む結果セットを取得する必要があります。

関連する問題