2010-04-16 4 views
9

나는 엔티티 묶음을 관리하는 핵심 데이터 기반 응용 프로그램을 보유하고 있습니다. 나는 다음을 할 수 있기를 기대하고있다.코어 데이터가 포함 된 고유 한 결과 집합 검색

나는 이름, 유형, 순위, foo1, foo2와 같은 속성을 갖는 엔티티 "SomeEntity"를가집니다.

이제 SQL 용어로 말하면 SomeEntity에는 여러 행이 있습니다. 달성하기 위해 노력하고있는 것은 각 인스턴스에 중복 유형이있을 수 있지만 사용 가능한 유형 만 검색하는 것입니다. 또한 순위에 따라 순서대로 반환해야합니다. 이제 오른쪽

NSError *error = NULL; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setReturnsDistinctResults:YES]; 
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"type", @"rank", nil]]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeEntity" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

// sort by rank 
NSSortDescriptor *rankDescriptor = [[NSSortDescriptor alloc] initWithKey:@"rank" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:rankDescriptor,nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[rankDescriptor release]; 

NSArray *fetchResults = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

[fetchRequest release]; 

return fetchResults; 

그 다음으로 충돌한다 : 여기

SELECT DISTINCT(type) ORDER BY rank ASC

내가 지금까지 그 깨고 한 코드입니다 : 그래서 SQL에서, 내가 무엇을 찾고있어 다음과 같다 : Invalid keypath section passed to setPropertiesToFetch:

+0

예제를 업데이트했습니다. 가져 오기 속성에 오류가 있습니다. –

+0

속성을 지정하여 @ "type"및 @ "rank"를 가져 오면 두 속성 모두에서 고유하게 나타납니다. @ "type"속성 만 지정해야합니다. –

답변

18
NSManagedObjectContext * ctx ; /* some ctx */  
NSFetchRequest * req; /* your request */ 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeEntity" inManagedObjectContext:context]; 
NSDictionary *entityProperties = [entity propertiesByName]; 
[req setEntity:entity]; 
[req setReturnsDistinctResults:YES]; 
[req setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"type"]]]; 
[req setSortDescriptors:[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"rank" ascending:YES]]]; 
NSArray * result = [ctx executeFetchRequest:req error:nil]; 
+0

ged ORDER BY에 편집 된 예제. 결과로 배열 배열이 'SomeEntity'이고 다른 유형은 순위에 따라 정렬됩니다. –

+0

거의 수정되지 않았습니다. 가져온 속성을 편집했습니다. –

+3

[fetchRequest setResultType : NSDictionaryResultType]; 설정하면 결과에 SomeEntity'ies가 표시되지 않지만 NSDictionary에는 하나의 가져온 속성 인 "type"이있는 경우가 있습니다. –

관련 문제