【发布时间】:2015-02-13 08:11:36
【问题描述】:
我对 Core Data 有特定但相当常见的任务,但找不到答案。 假设我们有 CoreData 收入模型。每天它都充满了未知数量的记录。 任务是显示一段时间内的收入图。 所以,我必须做的是计算一天的总收入并显示情节。
我知道如何总结一段时间:
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"income"];
NSExpression *expression = [NSExpression expressionForFunction:@"sum:" arguments:@[keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"result"];
[expressionDescription setExpression:expression];
[expressionDescription setExpressionResultType:NSDoubleAttributeType];
NSFetchRequest *fetchRequest = <#create fetch request#>;
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setPropertiesToFetch:@[expressionDescription]];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"date >= %@ && date <= %@", startDate, endDate,];
[fetchRequest setPredicate:predicate];
如果我将 NSCompoundPredicate 设为所有字段的总和,响应包含一个总和。
如何在每个时间段执行它并获得一次响应?
谢谢
【问题讨论】:
-
我认为您正在寻找的是相当于 SQL 'GROUP BY' 子句。在 CoreData 中,您可以通过设置 fetchRequest 的
propertiesToGroupBy属性来做到这一点。问题是date包括(大概)时间,因此每个日期/时间将单独分组。如果您可以修改数据结构以包含当天的属性(不包括时间),那么您可以使用它来对结果进行分组。 -
@pbasdf 我想知道如何将 strftime 压缩到 CoreData 生成的 SQL 中。就像首先我们声明 fetchedProperty 是 strftime blah 然后我们按此字段分组。不确定表达式是否会验证这一点。示例:aprogrammersday.blogspot.com/2014/02/…
-
@Andy 我没有想到 Fetched Properties,但我看不出它们如何用于将 strftime 放入 SQL 中?
-
@pbasdf wow 实际上可能会很有趣。
标签: ios objective-c core-data