objective c - tutorial - Comment créer un NSFetchRequest qui filtre les objets Core Data en fonction des attributs ET des relations?



core data tutorial francais (1)

Vous pouvez parcourir les relations dans un NSPredicate . Par exemple, vous pourriez écrire quelque chose comme

[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster.name LIKE \"Blockbuster C\"", @"Transformers 2"]

Maintenant, si vous n'avez pas de propriété à comparer et que vous devez vérifier les objets réels, vous pouvez utiliser quelque chose comme:

[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster IN %@", @"Transformers 2", setOfBlockbusters]

La syntaxe complète est documentée here . Mais setOfBlockbusters peut être un ensemble, un tableau ou un dictionnaire (s'il s'agit d'un dictionnaire, les valeurs, et non les clés, sont utilisées).

J'ai une configuration de modèle Core Data comme ça:

  • Entité de blockbuster
    • Relation To-Many avec les entités DVD .
  • Entité DVD
    • attribut title (chaîne)
    • Relation à un seul avec une entité Blockbuster parente

Un seul Blockbuster peut contenir plusieurs DVD (To-Many). Chaque DVD ne peut faire partie que d’un seul Blockbuster (To-One).

Il y a plusieurs Blockbuster et certains peuvent contenir des entités DVD partageant le même titre que les entités DVD des autres Blockbuster. Par exemple, Blockbuster A peut avoir une copie de "Transformers 2", tout comme Blockbuster C et Blockbuster G. Imaginons qu'aucun Blockbuster ne contienne plus d'une copie du même film intitulé.

Je suis intéressé à saisir le DVD Transformers 2 de Blockbuster C. Je ne veux pas que les copies de Blockbuster A ou G , parce que mon patron y fréquente, et je ne peux que me permettre de brûler cette poubelle dans Blockbuster C.

Ma question est la suivante: comment puis-je créer un NSFetchRequest qui capture un DVD intitulé "Transformers 2", qui est un enfant de l'entité parent Blockbuster "C"?

Ce type de requête va récupérer tous les DVD "Transformer 2", mais pas celui spécifique à l'entité 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];

Existe-t-il un moyen de transmettre, par exemple, l'identifiant d'objet d'un objet associé à l'intérieur du NSPredicate, en le filtrant en fonction de cela?





entity-relationship