如何在CoreData中使用@sum

时间:2009-07-21 05:00:14

标签: iphone objective-c cocoa core-data

我有周模型,将Day作为子对象。在Week模型中有“days”关系属性来访问所有关联的Day对象。日模型有持续时间属性。

如何确定指定Week对象的一天持续时间总和?如果有代码示例如何使用@sum函数创建谓词对象会很棒。

也可以在Week类上具有给定值的“计算”weekDuration属性 获取期间相关日期的总和?对于这些问题,这将是最优雅的解决方案,但我不相信CoreData可以做到这一点。

1 个答案:

答案 0 :(得分:8)

以下是一个示例,说明如何设置查询,以便仅查找周期持续时间总和大于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);

您实际上可以以类似的方式实现计算属性,只需将其添加到支持Week实体的NSManagedObject子类中:

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