2011-08-31 2 views
0

키 값 수집 함수를 NSExpression과 결합 할 수 있습니까? CoreData와 함께 사용하여 관리 대상 객체 클래스의 값 중 최대 값을 얻었습니다.키 값 함수를 NSExpression과 결합

이제 NSSet을 포함하는 다른 관리되는 개체 클래스가 있습니다. NSSet에서 @sum 값의 최대 값을 찾고 싶습니다.

예를 들어, 나는 값의 NSSet을 가진 관리 객체가 10 개 있습니다. 각 집합의 값을 @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

그래, 내 게시물은 분명하지 않았다 : 나는 이것을 추가했다. "예를 들어, 나는 값이 NSSet 인 관리 객체가 10 개 있습니다. @sum 값을 각 세트에 넣고 최대 값을 찾고 싶습니다. 10 개의 관리 대상 개체 중 하나입니다. " – bandejapaisa

+0

또한 오류는 실제로 : 캐치되지 않은 예외 'NSInvalidArgumentException'으로 인해 응용 프로그램을 종료합니다. 이유 : '유효하지 않은 keypath 요소 (관계 또는 특성이 아님) : @ um'. 그래서이 호출을 캡슐화하는 관리 대상 객체에 메서드를 추가하려고 시도했습니다. - (NSNumber *) weekTotal { return [self valueForKeyPath : @ "usageMetrics. @ sum.value"]; } ... 그리고 weekTotal이 관리 대상 객체에서 발견되지 않습니다 (일시적인 현상 일 가능성이 높습니다). – bandejapaisa

답변

1

를 작동하지 않는 것

내가 할이 :있는 NSArray를 반환

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

12 개 결과 (발견 된 관리 객체의 수)가 합계되어 값을 합산 한 것입니다.

나는 다음을 수행하십시오

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

일한!

NSExpressionsum:max:을 쌓을 수 있는지 알고 싶습니다.