Iphone 如何将@sum与CoreData一起使用

Iphone 如何将@sum与CoreData一起使用,iphone,objective-c,cocoa,core-data,Iphone,Objective C,Cocoa,Core Data,我有一个星期模型,它将天作为子对象。周模型中有“天”关系属性,可以访问所有关联的天对象。日模型具有持续时间属性 如何计算指定周对象的一天持续时间的总和?如果有一个代码示例,说明如何使用@sum函数创建谓词对象,那就太好了 还有可能在给定值的Week类上具有“计算”的weekDuration属性吗 取数期间相关天数的总和?这将是解决这些问题的最优雅的解决方案,但我认为CoreData不可能做到这一点。下面是一个示例,说明如何设置查询,只查找天数总和大于100的周数 NSManagedObjectC

我有一个星期模型,它将天作为子对象。周模型中有“天”关系属性,可以访问所有关联的天对象。日模型具有持续时间属性

如何计算指定周对象的一天持续时间的总和?如果有一个代码示例,说明如何使用@sum函数创建谓词对象,那就太好了

还有可能在给定值的Week类上具有“计算”的weekDuration属性吗
取数期间相关天数的总和?这将是解决这些问题的最优雅的解决方案,但我认为CoreData不可能做到这一点。

下面是一个示例,说明如何设置查询,只查找天数总和大于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);
实际上,您可以以类似的方式实现computed属性,只需将其添加到支持Week实体的NSManagedObject子类中:

- (NSNumber *) duration {
  return [self valueForKeyPath:@"days.@sum.duration"];
}