将键值函数与NSExpression结合使用

时间:2011-08-31 22:30:00

标签: ios core-data collections key-value-coding

我可以将键值集合功能与NSExpression结合使用吗?我在CoreData中使用它来从我的托管对象类中获取最大值:它运行得很好。

现在我有另一个包含NSSet的托管对象类。我想在NSSet中找到@sum值的最大值:

例如,我有10个托管对象,每个托管对象都有一个NSSet值。我想@sum每个集合中的值,然后找到10个托管对象中最大的一个。

我通常会使用[object valueForKeyPath:@"usageMetrics.@sum.value"]获得总和 - 这很好。

我想结合并做一些像:

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"usageMetrics.@sum.value"];
NSExpression *valueSumExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];

似乎无法正常工作

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid keypath element (not a relationship or attribute): @sum'

1 个答案:

答案 0 :(得分:1)

我这样做:

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"usageMetrics.value"]; 
NSExpression *valueSumExpression = [NSExpression expressionForFunction:@"sum:" arguments:[NSArray arrayWithObject:keyPathExpression]];

返回一个包含12个结果的NSArray(这是它找到的托管对象的数量),并将值相加。

然后我做了:

NSDecimalNumber *maxValue = [results valueForKeyPath:@"@max.maxValue"]; (maxValue being the name of the NSExpressionDescription)

哪个有效!

我想知道是否可以将sum:max:堆叠到NSExpression