2011-08-31 29 views
0

我可以將鍵值收集函數與NSExpression結合使用嗎?我使用它與CoreData來從我的託管對象類中獲取最大值:它的工作效果很好。將鍵值函數與NSExpression結合使用

現在我有這個其他的託管對象類,它包含一個NSSet。我想查找NSSet中@sum值的最大值。

因此,例如,我有10個託管對象,每個託管對象都有一個NSSet值。我想@sum每個集合中的值,然後找到10個管理對象中最大的一個。

我通常會得到使用[object valueForKeyPath:@"[email protected]"]的總和 - 這很好。

我想結合,做somethinge,如:

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"[email protected]"]; 
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' 
+0

集合的總和是單個值,而不是集合。 'max'只對一個系列有意義。你想達到什麼目的? –

+0

是的,我的帖子不太清楚:我添加了這個:「例如,我有10個託管對象,每個託管對象都有一個NSSet值,我想在每組中設置@sum值,然後找到最大值在10個管理對象中。「 – bandejapaisa

+0

此外,錯誤實際上是:終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:'無效的keypath元素(不是關係或屬性):@sum'。所以我然後嘗試添加一個方法到我的託管對象封裝這個調用: - (NSNumber *)weekTotal { return [self valueForKeyPath:@「usageMetrics。@ sum.value」]; } ...並且它抱怨在管理對象上找不到weekTotal(可能是因爲它是暫時的)。 – bandejapaisa

回答

1

我這樣做:

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

它返回一個NSArray的12個結果(這是它找到的管理對象的數量),並總結了這些值。

我然後執行:

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

它的工作!

我想知道是否可以將sum:max:堆棧成NSExpression