用核心数据计算一个简单的总和

我有一个简单的核心数据存储与实体成本与整数属性“价值”。 我想总结一下我的商店中的所有成本,这相当于下面的sql语句:

SELECT sum(value) FROM costs 

我如何在Cocoa Touch中做到最有效的方式? 通过使用核心数据? 或者只是得到所有的成本实体,并手动进行总结?

最好的方法是对特定值使用fetch,并提供一个具有sum: function的NSExpressionDescription 。

在执行读取操作时,您将得到一个包含字典的单元数组,其中的字符与expression式描述匹配,其值是expression式的结果。 在这种情况下,您将得到一个sum键,其值将是给定expression式的属性的总和。

在数组和集合上有一些特殊的键值编码操作符 ,其中之一是@sum 。 如果您将所有想要求和的对象提取到一个称为costs的集合中,并且如果要为每个对象求和的属性是value ,则可以使用@sum运算符,如下所示:

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

Apple文档说:“@sum运算符返回由运算符右边的键path指定的属性值的总和,每个数字都被转换为double值,计算出总和值,总和为包装成NSNumber的实例并返回。“

这就是说,你可以使用“doubleValue”,而不是“intValue”…或者你甚至可以使用“floatValue”或任何有效的nsnumber转换来获得你打算使用的types。

所以,下面的工作也很好:`在这里input代码:

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

要么:

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