Как я могу выполнить подзапрос в Базовых данных для связи со многими? - PullRequest
2 голосов
/ 29 апреля 2011

Я провел некоторое исследование и не могу найти ответ на простую проблему с основными данными.

Вот упрощенная модель объекта:

Person -->> Events
Event --> Date

Я бы хотел опросить всех людей и отсортировать их по последнему событию.

Я посмотрел на некоторые сообщения о SUBQUERY в предикате. Тем не менее, я не знаю, как запросить самые последние. Я не могу использовать «event.date» в дескрипторе сортировки, так как он не разрешен, поскольку это NSSet.

Код для справки ...

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

// The following errors:    
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"event.date" ascending:NO selector:nil];

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 01 мая 2011

Я решил эту проблему, добавив новое поле даты, «lastEvent», в объект Person, который обновляется с самой последней датой события.Таким образом, я могу просто отсортировать по полю «lastEvent».

0 голосов
/ 29 апреля 2011

Вы подходите к проблеме задом наперед. Вы должны получить Event объекты, отсортированные по дате, а затем запросить у каждого Event объекта связанные с ним Person объекты.

Вы можете создать предикат подзапроса для поиска Event объектов, но вы не можете отсортировать отношения.

...