Как использовать @sum с CoreData - PullRequest
5 голосов
/ 21 июля 2009

У меня есть недельная модель с Днем в качестве дочерних объектов. В недельной модели есть свойство отношения «дни» для доступа ко всем связанным объектам «День». Дневная модель имеет свойство продолжительности.

Как узнать сумму продолжительности дня для указанного объекта Week? Было бы здорово иметь пример кода, как создать объект предиката с функцией @sum.

Также возможно иметь "рассчитанное" свойство weekDuration для класса Week, для которого задано значение суммы продолжительности связанных дней во время выборки? Это было бы наиболее элегантное решение для этих проблем, но я не верю, что это возможно с CoreData.

1 Ответ

8 голосов
/ 21 июля 2009

Вот пример того, как вы могли бы настроить свой запрос, чтобы найти только недели, в которых сумма продолжительности дней больше 100.

NSManagedObjectContext *context = ...;
NSManagedObjectModel *model = ...;
NSFetchRequest *fr = [[NSFetchRequest alloc] init];
fr.entity = [model.entitiesByName objectForKey:@"Week"];

//This predicate will be compiled into pure SQL
fr.predicate = [NSPredicate predicateWithFormat:@"days.@sum.duration > 100"];

NSError *error = nil;
NSArray *results = [context executeFetchRequest:fr error:&error];
if (error) {
  NSLog(@"ERROR: %@", error);
}
NSLog(@"Results: %@", results);

Вы можете фактически реализовать вычисляемое свойство аналогичным образом, просто добавьте его в подкласс NSManagedObject, поддерживающий вашу сущность Week:

- (NSNumber *) duration {
  return [self valueForKeyPath:@"days.@sum.duration"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...