2009-05-16 4 views
0

Dies ist eine Folgefrage zu einem früheren Post auf saving recent searches mit Core Data.Neueste Suchergebnisse schließen sich Core-Daten an

Um Suchergebnisse zu gruppieren, habe ich eine Entität Entry und History. Entry.history ist eine Beziehung zur Geschichte. History.entries ist eine To-Many-Beziehung zu Entry (die Umkehrung von Entry.history). Der Verlauf hat ein Datumsattribut createdAt. Ich versuche herauszufinden, wie alle Entry-Entities, die zur jüngsten History-Entität gehören, in einem NSFetchedResultsController abgerufen werden.

kann ich die jüngste Geschichte Einheit erhalten wie so

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"History" inManagedObjectContext:context]; 
    [request setEntity:entity]; 
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:NO]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
    [request setSortDescriptors:sortDescriptors]; 
    [request setFetchLimit:1]; 
    NSArray *results = [context executeFetchRequest:request error:&error]; 
    History *history = (History *)[results objectAtIndex:0]; 

Und dann der Eintrag Entitäten in den NSFetchedResultsController wie so

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"history == %@", history]; 
    request = [[NSFetchRequest alloc] init]; 
    entity = [NSEntityDescription entityForName:@"Entry" inManagedObjectContext:context]; 
    [request setEntity:entity]; 
    [request setPredicate:predicate]; 
    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:@"Root"];

Aber ich mag dies in einem einzigen Antrag tun. Bitte beachten Sie, dass es mir nur wichtig ist, dass der hostedResultsController Entry-Ergebnisse speichert.

Antwort

1

Sie sollten in der Lage sein, eine Art Descriptor zu haben, die Beziehungen folgt:

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entry" 
              inManagedObjectContext:context]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] 
            initWithKey:@"history.createdAt" 
             ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor 
                 count:1]; 
[request setEntity:entity]; 
[request setSortDescriptors:sortDescriptors]; 
[request setFetchLimit:1]; 
fetchedResultsController = [[NSFetchedResultsController alloc] 
          initWithFetchRequest:request 
          managedObjectContext:context 
           sectionNameKeyPath:nil 
             cacheName:@"Root"];