2011-03-30 6 views
2

이 문제는 이전에 제기되었을 수 있지만 해결 방법을 이해할 수 있을지 확신 할 수 없습니다. 다음은 iOS 용 Objective-C, Core Data의 문제입니다.코어 데이터 모델링 : 다 대다 브릿지

사용자 별 트위터와 같은 관계를 모델로 만들겠습니다. 하나의 사용자가 많은 것을 따라갈 수 있고, 많은 사용자가 따라갈 수 있습니다. 나는 단지 사용자가 추종자와 같은 양방향 관계를 가지고 같은, 다음에 할 수 없음을 의미합니다 - 같은 CreateTime 더, 보류 및 레벨 등의 자체가 한 다음과 같은 속성 : < <

사용자 - >> 사용자

하지만 하나 이상의 엔티티를 추가하고, 다음을 수행하고, 다음과 같은 관계로 이어집니다.

사용자 < - >> < < 다음 -> 사용자

다음

두 가지 질문 :

  1. 이 가장 좋은 방법인가?

  2. 그렇다면 [aUser valueForKeyPath : ...]; 추종자 나 친구를 사로 잡을 수 있습니다.

답변

2

이 방법이 가장 좋습니다.

나는이 문제가 "모범 사례가 확립 된 상황"범주에 속하지 않다고 생각하지만 합리적인 해결책처럼 보입니다.

그렇다면 [aUser valueForKeyPath : ...]; 추종자 나 친구를 사로 잡을 수 있습니다.

는 이제 Following 다음을 수행하는 사람을위한 follower 속성을 가지고 있으며, 사람에 대한 leader 속성이 준수되고 있다고 가정 해 봅시다. 또한 User은 사용자를 따르는 사람들과 Following 관계에 대해 leads 속성을 가지고 있으며 사용자가 따르는 사람들과 Following 관계에 대해 follows 속성을 가지고 있습니다. 마지막으로 Username 속성을가집니다.

모든 것을 감안할 때, AUSER의 추종자의 이름을 얻으려면, 당신은 말할 수 :

NSSet * 추종자 = [AUSER valueForKeyPath을 : @ "leads.follower.name을"];

는 사람의 이름을 얻을 AUSER은 다음과 같습니다

NSSet * 지도자 = [AUSER valueForKeyPath을 : @ "follows.leader.name을"];

처음에는 각 경로의 마지막 두 키가 단수이기 때문에 키 경로에서 다시 세트를 얻는 것이 이상하게 보입니다.그러나 leads 속성은 Following 개체 집합을 반환하므로 leads.follower은 해당 개체에 대한 사용자를 포함하는 집합을 반환하고 leads.follower.name은 해당 개체의 사용자 이름을 포함하는 집합을 반환합니다.

0

나는 당신이 여기에서 성취하려는 것을 보여주는 훌륭한 예를 발견했으며, 나는 그것을 나눌 것이라고 생각했습니다. here에서 "다 대다 관계"제목을 확인하십시오. Person 엔티티와 FriendInfo 엔티티를 사용하여 예제를 찾으십시오.이 엔티티는 사용중인 패턴을 자세히 설명합니다.

참고 : Apple의 핵심 데이터 프로그래밍 가이드의 "관계 및 가져 오기 된 속성"섹션에 대한 링크이며, Apple 개발자 계정이없는 사용자에게 제공 될 수도 있고 사용하지 못할 수도 있습니다. 물론 변경 될 수 있습니다.

관련 문제