2010-05-19 2 views
0

데이터 모델에 Customer, Event 및 Address 개체가 있습니다. 고객과 주소 모두 이벤트와 일대 다 관계가 있습니다.핵심 데이터에서 일대일 관계를 쿼리/필터링하는 방법

나는이 일에 의해 고객의 이벤트에 대한 주소의 별개의 목록을 얻을 수 있습니다 : 사용자 인터페이스의 부분을 들어

NSSet *addressSet = [customer valueForKeyPath:@"events.address"]; 

을 내가 지금 일하고 있어요, 나는 대부분의 주소를 표시해야 주소가있는 최근 이벤트.

NSFetchRequest를 생성하고, 엔티티를 설정하고, 디스크립터를 정렬하고, 술어를 처리 한 다음 결과를 반복하면서 경로를 시작하지만 코드가 많은 것처럼 보입니다. Customer 객체의 "events"관계를 필터링하거나 정렬하는 분명한 방법이 없거나 NSFetchRequest를 가장 좋은 솔루션으로 만들 수 있습니까?

+0

답변을 수락하면 (그것이 맞다고 생각하면 :) 다음 질문에 대한 귀하의 평판을 높일 수 있습니다. –

답변

1

이것은 실제로는 NSSetNSArray에서 사용할 수있는 KVO 및 KVC 접근 자로 매우 간단합니다.

NSSet *eventsWithAddress = [[customer valueForKey:@"events"] filteredSetWithPredicate:[NSPredicate predicateWithFormat:@"address != nil"]]; 
id mostRecentEvent = [eventsWithAddress valueForKeyPath:@"@max.lastDate"]; 

물론 데이터 모델을 볼 수 없기 때문에 속성 이름을 사용할 수 있지만 코드가 어디로 이동해야하는지에 대한 일반적인 아이디어를 제공합니다. Apple의 설명서에서 어떤 연산자를 사용할 수 있는지 확인할 수 있습니다.

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/ArrayOperators.html

경고 : 당신이 가장 가능성이 그것을 조금 조정할 필요가있을 것이다, 그래서 StackOverflow의 코멘트 창에 작성 코드입니다.

+0

고마워요, 저를 올바른 길로 인도하십시오. filteredSetUsingPredicate에 대해 잊어 버렸습니다. 귀하의 코드에 추가해야하는 것은 lastDate가 현재 날짜/시간보다 작아야한다는 것입니다. –

관련 문제