次のような Core Data モデルのセットアップがあります。
- 大ヒットエンティティ
- DVDエンティティとの対多関係。
- DVDエンティティ
- タイトル属性 (文字列)
- 親ブロックバスターエンティティとの 1 対 1 の関係
1 つのブロックバスターに複数の DVD を含めることができます (To-Many)。各 DVD は、1 つの Blockbuster (To-One) の一部にしかできません。
複数のブロックバスターがあり、他のブロックバスターの DVD エンティティと同じタイトルを共有する DVD エンティティを含むものもあります。たとえば、ブロックバスター Aには「トランスフォーマー 2」のコピーがあり、ブロックバスター Cとブロックバスター Gも同様です。ブロックバスターに同じタイトルの映画が複数あるとしましょう。
Blockbuster CからTransformers 2のDVDを手に入れたいと思っています。Blockbuster AまたはGのコピーは不要です。なぜなら、私の上司は頻繁にそこに行くからです。Blockbuster Cでこのごみを燃やすしか方法がありません。
私の質問は、 Blockbuster "C" 親エンティティの子である "Transformers 2"というタイトルのDVDを取得する NSFetchRequest をどのように形成すればよいですか?
このタイプのリクエストは、すべての「トランスフォーマー 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 を渡し、それに基づいてフィルタリングする方法はありますか?