2009-12-14 4 views
3

다 대 다 관계가 포함 된 CoreData 데이터 모델이 있습니다. NSPredicate는 다 대다 관계를 지원하지 않습니다. CoreData.pdf : "하나의 술어에 keypath에 하나의 요소 만 가질 수 있습니다."CoreData, 다 대다 관계 및 NSPredicate

레시피 예 : 많은 요리법 및 많은 재료. 조리법에는 "소금"이 하나의 재료가 될 수있는 많은 재료가 포함될 수 있지만 많은 요리법에는 "소금"이 사용됩니다. 이것은 자연스러운 다 - 대 - 다 관계입니다.

제안되는 해결 방법은 무엇입니까?
CoreData가 좋지 않았으며 SQLite로 되돌아 가야합니까?

+1

"많은 요리법에는"소금 "및"소금 "성분이 많이 들어 있습니다." 두 가지 방법으로 한 가지가 있습니다. –

+0

@just somebody 레시피 엔티티와 성분 엔티티를 고려하십시오. 많은 요리법이 있고 많은 것은 동일한 성분을 가지고 있습니다. 많은 요리법에 사용되는 많은 재료가 있습니다. 그것은 같은 것이 아닙니다. 성분 실체에 소금 성분의 인스턴스를 하나만 가질 필요가 있습니다. 또한 모든 재료를 조리법에서 찾아야 할 필요성이 있습니다. 소금을 사용하는 모든 요리법을 찾는 것이 바람직합니다. 그것은 다 - 대 - 다 관계입니다. 실제로 관계는 CoreData가 수행하는 중간 테이블로 생성됩니다. – zaph

+0

"조리법에 많은 성분이있을 수 있습니다 ..."라는 질문을 수정했습니다. 분명히 의도 된 예였습니다. –

답변

5

제 이해는 중간 엔터티를 추가하여 다 대다 관계를 별도의 일대 다 관계로 만들 수 있다는 것입니다.

보유량 :
레시피에는 많은 성분이 포함되어 있습니다.
성분에는 많은 조리법이 있습니다.

다음과 같이 새 RecipeIngredient 엔티티를 만듭니다.
Recipe에는 많은 RecipeIngredients가 있습니다.
성분에는 많은 RecipeIngredients가 있습니다.
레시피 재료에는 하나의 레시피와 하나의 성분이 있습니다.

+0

예, 기본적으로 제가하기로 결심 한 것입니다. CoreData는 중간 테이블을 만들고 NSPredicate에서 사용할 수 없습니다. – zaph

+0

하지만 중간 엔터티를 만들면 NSPredicate와 함께 사용할 수 있습니다. 일반적으로, 여러분의 필요에 맞는 모델을 만들고 코어 데이터가 세부 사항을 처리하도록하여 코어 데이터가 SQLite에서 모델을 구현하는 방법에 대해 걱정할 것을 – gerry3

+0

나는 명성 8,017을 가진 사람과 모순되기를 주저하지만 gerry3 ... 이것은 거대한 진흙탕처럼 들리므로 끔찍한 충고처럼 들립니다.나는 독자들에게 [다른 조언을 가진이 스레드]를 볼 것을 제안한다. (http://stackoverflow.com/questions/1347776/how-to-correctly-setup-a-nspredicate-for-a-to-many-relationship-when-using- core-d) –

1

이 질문은 내가 실제로 가지고있는 문제로 잘못된 길로 인도했습니다. 술어로 다 - 대 - 다 관계를 질의 할 수 있습니다. 당신은

[NSPredicate predicateWithFormat:@"SUBQUERY(teams, $t, $t IN %@)[email protected] > 0", teams)]; 

이 술어는 이야기 엔티티에 대한 가져 오기 요청에 사용됩니다 ... 더 아래이 있었다 A <<-->> B <<-->> C

(Story <<-->> Team와 모델) 내가 사용하는 조건과 같은 쿼리 할 수 ​​없습니다. 두 번째 "팀"은 이야기를 검색하고있는 일련의 팀 또는 배열입니다. SUBQUERY 형식은 다소 혼란 스럽습니다. 따라서 "현재 이야기 팀 컬렉션의 각 팀마다이 컬렉션이 다른 팀 (팀)에 있는지 확인하십시오."라고 읽을 수 있습니다.

희망이 도움이됩니다.

+0

그 drive-by downvotes를 좋아해 야한다 – rob5408

+0

아마 나는 "바른 길"을 의미 했느냐? – rob5408