2009-10-26 3 views
3

코어 데이터에 여러 객체가 설정되어 있는데 그 중 하나는 "갑"이고 그 중 하나는 "카드"입니다. . "카드"에는 "id"를 비롯한 몇 개의 번호가 매겨진 관계가 있습니다. "갑판"은 카드와 일대 다의 관계가 있습니다.코어 데이터에서 일대 다 관계로 만들어진 NSSet의 속성 값 최소값 얻기

ID와 같이 번호가 지정된 속성에 최소값을 갖는 카드를 찾는 가장 좋은 방법은 무엇입니까? 나는이 같은 최소 얻기 위해 식을 만들 수 있다고 생각

NSSet *cardList = self.cards; 

을 :

분명히 나는이 같은 카드의 목록을 얻을 수

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"id"]; 
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:" 
      arguments:[NSArray arrayWithObject:keyPathExpression]]; 

을하지만 확실히 조사 할 수 없습니다 이 표현식을 사용하여 최소값 id (또는 최소값 id)를 가진 카드를 추출하는 방법을 설명합니다.

//assuming Card has an Id property which is a number 
NSNumber *minId = [deck valueForKeyPath:@"[email protected]"]; 

NSSet *minCards = [[deck cards] filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"Id==%@", minId]]; 

Id 재산 deck.cards의 최소와 동일한 카드의 NSSet 줄 것이다 :

+0

, 나는 배리 Wark의 조언에 따라 두 가지 기능을 다음 썼다 (있는 NSString *) leastId { \t있는 NSString * 키 패스 = [있는 NSString stringWithFormat을 : @ "카드 @. 최소 % @ ", 최소값]; \t NSNumber * minId = [self valueForKeyPath : keyPath]; \t \t \t return minId; } - (NSSet *) cardsForLeast (는 NSString *) leastId { \t \t는 NSString * 키 패스 = [있는 NSString stringWithFormat : @ ".. 카드 @ %의 분 @"leastId]; \t NSNumber * minId = [self valueForKeyPath : keyPath]; \t \t NSSet * minCards = [selfCards filteredSetUsingPredicate : [NSPredicate predicateWithFormat : @ "id == % @", minId]]; \t \t \t return minCards; } –

답변

7

당신이 사용하는 키 - 값 코딩을 할 수 있습니다.

자세한 내용은 키 - 값 프로그래밍 가이드의 설명 Set and Array Operators을 참조하십시오. - (의 NSNumber *) numberForLeast : 향후 참조를 위해

+0

놀랍도록 간단합니다. –

+0

예, 정확한 구문을 사용할 때마다 키 - 값 코딩 집합과 배열 연산자를 사용하여 몇 가지 알고리즘을 매우 쉽게 만들 수 있습니다. 아, 역동적 인 언어의 힘. –

관련 문제