2012-07-03 2 views
-1

두 모델 사이에 일대일 관계가있는 Practice와 PracticeRecord가 있습니다. 이제 관련 practiceRecord 객체의 수가 최소이지만 0보다 큰 Practice 객체의 배열을 가져와야합니다. 나는 코드 아래에 썼지 만 작동하지 않았고 요청을 가져올 때 예외가 발생했습니다. 아무나 제발 우아한 솔루션을 제공 할 수 있습니다. 미리 감사드립니다.코어 데이터의 다 대다 하위 모델 수의 최소값 가져 오는 방법

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Practice"]; 

request.predicate = [NSPredicate predicateWithFormat:@"[email protected] > 0"];  

[request setResultType:NSDictionaryResultType]; 

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"[email protected]"]; 
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:" arguments:[NSArray arrayWithObject:keyPathExpression]]; 
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init]; 
[expressionDescription setName:@"minPracticeRecordTimes"]; 
[expressionDescription setExpression:minExpression]; 
[expressionDescription setExpressionResultType:NSDecimalAttributeType]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]]; 

NSError *error = nil; 
NSArray *objects = [context executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    // Handle the error. 
} 
else { 
    if ([objects count] > 0) { 
     NSLog(@"Minimum practice record times: %@", [[objects objectAtIndex:0] 
            valueForKey:@"minPracticeRecordTimes"]); 
    } 
} 

답변

0

내가이 생성됩니다 SQL을 고려하면, 이런 식으로 뭔가있을거야

문제가 핵심 경로에 집계 함수 ([email protected])를 사용하는 추측에는 요 :

SELECT min(count(practiceRecords)) AS minPracticeRecordTimes 
FROM Practice 
WHERE count(practiceRecords) > 0 

물론 유효하지 않습니다. 이 작업을 수행해야하는 경우

는, 어쩌면 해제 정상화 당신이 가져 직선 요청을 사용할 수 있습니다, 조금 당신의 실체를하고 PracticeRecord가 추가되거나 제거 될 때마다 업데이트됩니다 Practice,에 count 필드를 추가합니다.