使用Core Data计算简单总和

时间:2011-07-31 13:05:29

标签: objective-c ios core-data

我有一个简单的Core Data商店,其实体Cost带有整数属性“value”。我想总结一下我店里的所有成本,这相当于以下的sql语句:

SELECT sum(value) FROM costs

如何在Cocoa Touch中以最有效的方式实现?使用核心数据?或者只是获取所有成本实体并手动进行求和?

3 个答案:

答案 0 :(得分:16)

有一些特殊的key value coding operators适用于数组和集合,其中一个是@sum。如果您将要求求和的所有对象提取到名为costs的集合中,并且如果要为每个对象求和的属性为value,则可以使用@sum运算符,如下所示:

float theSum = [costs valueForKeyPath:@"@sum.value"];

答案 1 :(得分:11)

最好的方法是使用fetch for specific values并提供NSExpressionDescription with a sum: function

当您执行fetch时,您将获得一个包含字典的单元素数组,该字典的键与表达式描述匹配,其值是表达式的结果。在这种情况下,您将获得一个sum键,其值将是给定表达式的属性的总和。

答案 2 :(得分:0)

Apple文档说" @sum运算符返回由运算符右侧的键路径指定的属性值的总和。每个数字都转换为double,计算值的总和,并将总数作为NSNumber的实例包装并返回。"

话虽如此,你可以使用" doubleValue"而不是" intValue" ......或者你甚至可以使用" floatValue"或任何有效的nsnumber转换以获取您打算使用的类型。

所以,以下内容也很有用:`在此处输入代码:

 double sumOfCostValues = [[costs valueForKeyPath:@"@sum.value"] doubleValue];

或:

 float sumOfCostValues = [[costs valueForKeyPath:@"@sum.value"] floatValue];