使用Core Data计算简单总和

MrA*_*lek 11 core-data objective-c ios

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

SELECT sum(value) FROM costs
Run Code Online (Sandbox Code Playgroud)

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

Cal*_*leb 16

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

float theSum = [costs valueForKeyPath:@"@sum.value"];
Run Code Online (Sandbox Code Playgroud)


Tec*_*Zen 11

最好的方法是使用特定值提取并提供带有sum:函数NSExpressionDescription.

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

  • 实际上它的内存效率更高,因为您只为fetch的操作分配了一些对象,而不是几十个或更多的托管对象.这样可以将操作保留在存储中,而不是将数据拉入内存.它更像是传统的程序数据库操作. (4认同)