私はそういうコアデータモデルを設定しています:
1つのBlockbusterの中に複数のDVDを入れることができます(To-Many)。各DVDは、1つのブロックバスター(To-One)の一部にしかできません。
複数のブロックバスターがあり、一部には他のブロックバスターのDVDエンティティと同じタイトルを共有するDVDエンティティが含まれている場合があります。たとえば、Blockbuster Aには「Transformers 2」のコピーがあり、Blockbuster CおよびBlockbuster G。同じタイトルの映画のコピーが複数あるBlockbusterがないとします。
Blockbuster CからTransformers 2DVDを取得することに興味があります。 Blockbuster Aまたは[〜#〜] g [〜#〜]、私のボスがそこに頻繁にいるので、私はこのゴミをBlockbuster Cで燃やすことでのみ逃れることができます。
私の質問は、子であるtitle "Transformers 2"で[〜#〜] dvd [〜#〜]を取得するNSFetchRequestをどのように形成するかです。 Blockbuster "C"親エンティティの?
このタイプのリクエストは、すべての「Transformer 2」DVDを取得しますが、Blockbuster Cエンティティに固有のものは取得しません。
NSManagedObjectContext *moc = [self managedObjectContext];
NSString *aTitle = @"Transformers 2";
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", aTitle];
[request setEntity:[NSEntityDescription entityForName:@"DVD" inManagedObjectContext:moc]];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
// error handling code
[request release];
NSPredicate内の関連オブジェクトのオブジェクトIDを渡して、それに基づいてフィルタリングする方法はありますか?
NSPredicate
内の関係をトラバースできます。たとえば、次のように書くことができます
[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster.name LIKE \"Blockbuster C\"", @"Transformers 2"]
ここで、比較するプロパティがなく、実際のオブジェクトをチェックする必要がある場合は、次のようなものを使用できます
[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster IN %@", @"Transformers 2", setOfBlockbusters]
完全な構文は here で文書化されています。ただし、setOfBlockbusters
は、セット、配列、またはディクショナリにすることができます(ディクショナリの場合は、キーではなく値が使用されます)。