2013-03-13 5 views
1

개인, 지역 및 경계가 3 개 있습니다. 경계에는 'state'속성이 있습니다. 사람은 많은 지역을 가질 수 있습니다. 지역은 많은 경계를 가질 수 있습니다. 사람 항목으로2 개 관계를 통해 핵심 데이터 검색

Person <<-->> Region <<-->> Boundary.state 

을, 나는 조건 검색 이런 종류의 작업을 수행 할 수 그가의 경계를 가지고 모든 상태를 알아 싶습니다 또는 내가 중첩을 수행해야합니다 검색 :

NSMutableArray *states = [NSMutableArray array]; 

for (Region *region in person.regions) { 
    for (Boundary *boundary in region.boundaries) { 
     // add state to array 
    } 
} 

편집 :

Person<<-->>Region<<-->>Boundary 
: 나는 데이터베이스 사람이 아니에요 그들은 다 대다 관계입니다 실현에 그것을 생각하지 않았다

죄송합니다

+0

상태라는 엔터티가 있습니까? 술어를 사용하여 사람이 가지고있는 모든 경계를 얻을 수 있습니다. 거기서부터 상태를 알아낼 수 있습니다. – Fogmeister

+0

아니요 국가에 대한 엔터티가 없으며 경계 엔터티에있는 속성입니다. 이게 해결 될 수 있을까요? State 엔티티를 생성 하시겠습니까? 그것은 오직 하나의 속성을 포함 할 것입니다 ... – Padin215

+0

아니, 나는 [대답을 넣어. – Fogmeister

답변

2

술어의 "ANY"콜렉션 연산자는 중첩 된 다 대다 관계와 작동하지 않습니다. 여기에 SUBQUERY를 사용할 수 있습니다.

[NSPredicate predicateWithFormat:@"SUBQUERY(regions, $r, ANY $r.persons == %@)[email protected] > 0", thePerson]]; 
+0

그래, 그랬어! 이제 저는 구석에 가서 그것이 어떻게 작동하는지 알아 내려고 노력할 것입니다. 고맙습니다! – Padin215

2

Person는이 같은 NSFetchRequest 사용할 수 있습니다 모든 Boundary 실체 ...

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

[request setPredicate:[NSPredicate predicateWithFormat:@"region.person = %@", thePerson]]; 

이를 얻으려면 것입니다 반환 Person 술어에 넣어 하나입니다 Boundary 개체의 배열입니다.

그럼 당신이 할 수있는 ...

NSSet *states = [NSSet setWithArray:[results valueForKey:@"state"]]; 

는 그런 상태는 사람이 "소유"한 독특한 상태의 설정됩니다.

이렇게 많은 변화가 있습니다. 당신은 ...

[NSPredicate predicateWithFormat:@"ANY region IN %@", thePerson.regions]; 

을 술어에 대한이의 라인을 따라 뭔가를 할 수

... 나는이 일 것 같아요?

+0

(당신은 더 빨랐다. 나는 내 대답을 버렸다 .-- 마지막 단계는 NSArray * states = [results valueForKey : @ "state"]'로 간소화 될 수있다. –

+0

아, 훌륭해, 내 대답을 편집 할 것입니다. – Fogmeister

+1

하! 감사합니다! 그리고 저는 경계가 많은 인물을 가질 수 있다고 언급해야한다고 생각합니다. 따라서 술어는 @ "모든 region.person == % @"이 될 것입니다. – Padin215

관련 문제