2011-08-09 5 views
28

엔티티의 특정 속성에 대한 고유 값을 검색하기 위해 코어 데이터에 NSFetchRequest을 설정하려고합니다. 즉CoreData 속성의 고유 값을 얻습니다.

다음 정보 엔티티 : 존, 베티, 에드워드 :

name | rate | factor | 
_______|______|________| 
John | 3.2 | 4 | 
Betty | 5.5 | 7 | 
Betty | 2.1 | 2 | 
Betty | 3.1 | 2 | 
Edward | 4.5 | 5 | 
John | 2.3 | 4 | 

어떻게 난 그냥 함께 배열을 반환하는 요청을 설정하는 것?

답변

69

고유 한 레코드를 얻으려면 지원 저장소를 사용해야합니다. 당신이 배열을 얻고 싶은 경우에

은 존, 베티, 에드워드 여기 당신이 그것을 어떻게 : 나는`선택한 줄 것을 제외하고 내가 말을 무슨 일이 있었는지입니다 @ "

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:self.managedObjectContext]; 

// Required! Unless you set the resultType to NSDictionaryResultType, distinct can't work. 
// All objects in the backing store are implicitly distinct, but two dictionaries can be duplicates. 
// Since you only want distinct names, only ask for the 'name' property. 
fetchRequest.resultType = NSDictionaryResultType; 
fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"name"]]; 
fetchRequest.returnsDistinctResults = YES; 

// Now it should yield an NSArray of distinct values in dictionaries. 
NSArray *dictionaries = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil]; 
NSLog (@"names: %@",dictionaries); 
+0

AlleyGator,하지만 하나 이상의 베티 같은 예를 들어, 같은 속성()와 개체가 하나 이상 있고, 반복되는 가치를 원하십니까? –

+0

이것은 중복되지 않은 세 개의 이름 배열을 제공합니다. 다른 데이터 없음. 비율, 요인 없음. – AlleyGator

+1

returnsDistinctResults 속성을 찾을 수 없습니다. 감사. 대답을 Upvoted하지만 NSArray에는'allValues' 메서드가 없습니다. 따라서 배열의 각 NSDictionary에서 각 값을 가져 오려면 사이클을 수행해야합니다. –

15

당신이 API를 의도 한 것처럼 객체 그래프 관리자 대신 절차 데이터베이스처럼 핵심 데이터를 사용하려고 시도하기 때문에 쉬운 방법을 찾을 수 없습니다.

핵심 데이터가 값 대신 개체와 관련되기 때문에 핵심 데이터에서이를 수행하는 간단한 방법은 없습니다. 관리되는 개체는 고유 한 것이 보장되므로 Core Data는 각 개체의 값이나 중복 여부 또는 다른 개체의 값에 대해별로 신경 쓰지 않습니다.

는 고유 한 값을 확인하는 방법은 다음과 같습니다

  1. fetch by specific value을 수행합니다. 그러면 키가 name이고 이름 문자열 자체의 값이 포함 된 일련의 사전이 제공됩니다.
  2. (1)에 반환 된 배열에서 set collection operator을 사용하여 고유 한 값 집합을 반환합니다.

그래서, 뭔가 같은 :있는 NSString의 집합을 반환합니다

NSSet *uniqueNames=[fetchedNameDicts valueForKeyPath:@"@distinctUnionOfSets.name"]; 

는 ... 모든 고유 한 값으로 객체.

+1

+1 distinctUnionOfObjects.name "'. 나는 차이가 있다는 것을 확신하지 못합니다. – Caleb

+0

NSExpression과 NSExpressionDescription은 어떻게 생겼을까요? – ephilip

+0

@ephilip - 나는 그것에 대해 또 다른 질문을 할 것입니다. 나는 그것을 코멘트로 짜낼 수 없다. – TechZen

5

Fetching Specific Property Values을 보시면 고유 값을 얻기 위해 세트를 사용할 필요가 없습니다.

+0

나는 그 열 값뿐만 아니라 객체를 가져오고 싶다. 만약 당신이 어떤 생각을 가지고 pls 도움이 ........ @ Alexandre 패 Telles –

관련 문제