2011-01-11 3 views
1

iPhone OS 3.1.3을 사용하는 iPod Touch에서 내 응용 프로그램의 사용자가 충돌 한 것을 추적했습니다 : 어떤 이유에서든 "@count : "CoreData 저장소의 표현식이 충돌을 일으키고 있습니다. 가, 내가 사고에 다음과 같은 오류가 수행 인출아이폰 OS 3.1.3이 적용된 iPod에서 명백한 @ count : 문제

NSExpression *avgExpression = [NSExpression expressionForFunction:@"average:" arguments:[NSArray arrayWithObject:keyPathExpression]]; 
NSExpressionDescription *ed = [[NSExpressionDescription alloc] init]; 
[ed setName:@"avgScalar"]; 
[ed setExpression:avgExpression]; 
[ed setExpressionResultType:NSFloatAttributeType]; 

NSExpression *countExpression = [NSExpression expressionForFunction:@"count:" arguments:[NSArray arrayWithObject:keyPathExpression]]; 
NSExpressionDescription *ed2 = [[NSExpressionDescription alloc] init]; 
[ed2 setName:@"countScalar"]; 
[ed2 setExpression:countExpression]; 
[ed2 setExpressionResultType:NSInteger16AttributeType]; 

[request setPropertiesToFetch:[NSArray arrayWithObjects:ed,ed2,nil]]; 

:

응용 프로그램을 종료

* 인해 캐치되지 않는 예외 'NSInvalidArgumentException'에, 이유는 여기에 관련 코드의 '*가 -constantValue 추상 클래스에만 정의됩니다. 정의 - [NSKeyPathExpression constantValue]! '

가져 오기를 avgExpression (@ "평균 :")으로 제한하면 모두 정상적으로 작동합니다. iPhone OS 3.1.3을 사용하는 iPod Touch에서만 말할 수있는 한 @ "개수 :"표현에 대해 뭔가 이상한 점이 있습니다. 어떤 아이디어?

다른 방법으로 전체 페치를 수행하고 키 경로 연산자를 사용하여 필요한 평균 및 개수를 얻을 수 있습니다. 그러나이 방법이 훨씬 비쌉니다. 그것이 누구인지 아는 사람?

답변

0

작은 성능 저하만으로 구형 OS에 대한 최상의 솔루션을 찾을 수 있습니다.

  1. 지우기 밖으로 요청의 표현 부분 avgExpression 내 가져 오기 요청을 실행

    [request setPropertiesToFetch:nil]; 
    
    [request setResultType:NSManagedObjectResultType]; 
    
  2. 가 수행 카운트 전용 가져 오기 :

    [managedObjectContext countForFetchRequest:request error:&error]; 
    

그것은 당신이 볼 수 CoreData의 내부가 모두 OS 년대에 속성에 초점을 맞춘 NSFetchRequest 객체를 NSLog'ing, 예를 들어, 아이폰 OS 4로 아이폰 OS 3 변경하는 것이이 문제를 통해 작업에서 분명하다.