结合NSExpression上的函数

时间:2013-08-22 11:14:13

标签: ios cocoa-touch core-data nsexpression

我目前正在使用NSExpressions来处理我从Core Data检索的数据。这些实体属于“交易”类型,并且有两个我感兴趣的属性:类型(NSString*)和值(double)。我想要的是每种类型的所有绝对值的总和。

我现在拥有的是:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:appDelegate.managedObjectContext];
NSAttributeDescription *att = [entity.attributesByName objectForKey:@"type"];
[request setEntity:entity];

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"value"];
NSExpression *expression = [NSExpression expressionForFunction:@"sum:" arguments:@[keyPathExpression]];

NSExpressionDescription *expDesc = [[NSExpressionDescription alloc] init];
[expDesc setName:@"typeSum"];
[expDesc setExpression:expression];
[expDesc setExpressionResultType:NSDoubleAttributeType];

[request setPropertiesToFetch:@[expDesc, att]];
[request setPropertiesToGroupBy:@[att]];
[request setResultType:NSDictionaryResultType];

NSError *err = nil;
NSArray* results = [appDelegate.managedObjectContext executeFetchRequest:request error:&err];

这将返回一个填充了字典的NSArray,其中包含具有该类型的实体的类型和值的总和,如下所示:

<_PFArray 0x15ecc5a0>(
{
    type = TypeName1;
    typeSum = "-15.5";
},
{
    type = TypeName2;
    typeSum = "22.5";
},
{
    type = TypeName3;
    typeSum = "237.9";
}
)

这个问题是总和不是绝对值的总和。有没有办法可以将abs:sum:结合起来给我想要的结果?

0 个答案:

没有答案