私は現在、コアデータから取得しているデータを処理するために NSExpressions を使用しています。エンティティは「トランザクション」タイプで、私が興味を持っている 2 つの属性があります: タイプ ( 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:
か?