2009-10-06 13 views
28

mam setup model Core danych tak:Jak utworzyć obiekt NSFetchRequest, który filtruje obiekty danych podstawowych na podstawie atrybutów i relacji?

  • Blockbuster Entity
    • do wielu relacji do DVD podmiotów.
  • DVD Podmiot
    • tytuł atrybut (string)
    • do jednego relacji do rodzica Blockbuster jednostka

Pojedyncza Blockbuster może mieć znajduje się w nim wiele płyt DVD (To-Many). Każda płyta DVD może być tylko częścią pojedynczego hitu (To-One).

Istnieje wiele Blockbuster's, a niektóre mogą zawierać elementy DVD, które mają ten sam tytuł, co elementy DVD z innych Blockbuster. Na przykład: Blockbuster A może mieć kopię "Transformers 2", podobnie jak Blockbuster C i Blockbuster G. Udawajmy, że żaden hitu nie ma więcej niż jednej kopii tego samego utytułowanego filmu.

Interesuje mnie pobranie Transformers 2 DVD z Blockbuster C. Nie chcę kopii od Blockbuster A lub G, ponieważ mój szef często tam przebywa, a ja mogę tylko uciec z tego kawałka śmieci w Blockbuster C.


Moje pytanie brzmi, jak mogę tworzyć NSFetchRequest który chwyta DVD z „Transformers 2” tytuł, który jest dzieckiem Blockbuster „C” jednostki dominującej?

Tego typu wniosek przechwyci wszystkie „Transformers 2” DVD, ale nie jeden specyficzny dla jednostki 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]; 

Czy istnieje sposób, aby zdać, powiedzmy, identyfikator przedmiotem powiązany obiekt wewnątrz NSPredicate, czy w oparciu o to filtrowanie?

Odpowiedz

46

Możesz przechodzić między relacjami w numerze NSPredicate.Na przykład, można napisać coś podobnego

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

Teraz, jeśli nie mają właściwość porównania przed i trzeba sprawdzić rzeczywiste przedmioty, a następnie można użyć czegoś podobnego

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

The pełna składnia jest udokumentowana here. Ale setOfBlockbusters może być zbiorem, tablicą lub słownikiem (jeśli jest to słownik, używane są wartości, a nie klucze).

+0

Dziękuję bardzo, że to zrobił! I dzięki za link do dokumentów. Bardzo pomocne. :) –

Powiązane problemy