我有周模型,将Day作为子对象。在Week模型中有“days”关系属性来访问所有关联的Day对象。日模型有持续时间属性。
如何确定指定Week对象的一天持续时间总和?如果有代码示例如何使用@sum函数创建谓词对象会很棒。
也可以在Week类上具有给定值的“计算”weekDuration属性 获取期间相关日期的总和?对于这些问题,这将是最优雅的解决方案,但我不相信CoreData可以做到这一点。
答案 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"];
}