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

Jim*_*Jim 5 iphone core-data

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

Mad*_*nRP 10

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

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"Count"];
NSExpression *sumOfCountExpression = [NSExpression expressionForFunction:@"sum:"
                                              arguments:[NSArray arrayWithObject:keyPathExpression]];
Run Code Online (Sandbox Code Playgroud)

有关可以使用的功能列表,请转到此处

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];
Run Code Online (Sandbox Code Playgroud)

然后像往常一样构造您的请求,然后将属性设置为获取到该表达式.

[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
Run Code Online (Sandbox Code Playgroud)

参考:核心数据编程指南

  • 值得注意的是,您需要将NSFetchRequest上的resultType设置为NSDictionaryResultType,并且返回的值将位于键'sumOfCount'下的返回字典中,或者您在上面的setName中设置的任何内容. (2认同)

Tom*_*iak 9

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

//assume that `pens` are NSArray of Pen
NSNumber *countSum=[pens valueForKeyPath:"@sum.count"];
Run Code Online (Sandbox Code Playgroud)

第二种是使用特定值的特定提取,并添加带有和的NSExpressionDescription.对于较大的数据库,这种方式更难但更好