iPhone:核心数据,如何从db获取值的总和

时间:2011-12-30 15:23:15

标签: iphone core-data

我有一个模型'钢笔',它有这样的属性:“makerName”和“Count”。我怎样才能得到所有'计数'的总和?核心数据能算出来吗?感谢...

3 个答案:

答案 0 :(得分:10)

是的,您可以从核心数据中获取,而不是获取和评估结果。您可以使用NSExpression执行诸如对核心数据求和之类的函数。

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"Count"];
NSExpression *sumOfCountExpression = [NSExpression expressionForFunction:@"sum:"
                                              arguments:[NSArray arrayWithObject:keyPathExpression]];

有关可以使用的功能列表,请点击此处

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSExpression_Class/Reference/NSExpression.html

然后,您需要创建一个NSExpressionDescription对象,您可以在其中设置刚刚创建的sumOfCountExpression的表达式。

NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"sumOfCount"];
[expressionDescription setExpression:sumOfCountExpression];
[expressionDescription setExpressionResultType:NSDoubleAttributeType];

然后按照通常的方式构造您的请求,然后将该属性设置为获取该表达式。

[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

参考:Core Data Programming Guide

答案 1 :(得分:9)

有两种方法可以解决这个问题:
首先 - 将数据提供给NSSet或NSArray并使用@sum运算符:

//assume that `pens` are NSArray of Pen
NSNumber *countSum=[pens valueForKeyPath:"@sum.count"];

第二个是使用特定的提取for specific value并添加了NSExpressionDescription和一个总和。对于较大的db来说,这种方式更难但更好

答案 2 :(得分:0)

我假设您想要的SQL等价物:

select sum(p.count) 
from pens p 
where makerName = '{whatever maker you are querying for}'

请查看此post以查找您要查找的代码。