用核心数据计算一个简单的总和
我有一个简单的核心数据存储与实体成本与整数属性“价值”。 我想总结一下我的商店中的所有成本,这相当于下面的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];