Самые последние результаты поиска объединяются в Core Data - PullRequest
0 голосов
/ 17 мая 2009

Это дополнительный вопрос к предыдущему сообщению , сохраняющий недавние поиски с базовыми данными.

Для группировки результатов поиска у меня есть объект Entry и объект History. Entry.history это отношение к истории. History.entries - это отношение многих к Entry (обратное Entry.history). История имеет созданный атрибут даты. Я пытаюсь выяснить, как получить все сущности Entry, которые принадлежат самой последней сущности History в NSFetchedResultsController.

Я могу получить самую последнюю сущность Истории, например, так:

    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];

А затем объекты Entry в NSFetchedResultsController, например, так:

    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"];

Но я хочу сделать это одним запросом. Пожалуйста, обратите внимание, что я забочусь только о fetchedResultsController, хранящем результаты Entry.

1 Ответ

1 голос
/ 20 августа 2009

Вы должны иметь возможность иметь дескриптор сортировки, который следует за отношениями:

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"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...