2012-03-19 1 views
1

이 웹 사이트는 방금 Xcode에서 코딩을 시작한 이래로 지난 몇 주 동안 나에게 매우 유용한 리소스였습니다. 이제 공통 데이터 문제를 보았습니다. 공통 데이터베이스에서 해결하는 방법을 알고 있지만 코어 데이터가 아니라면 누군가가 해결책을 제시 할 수 있다면 기쁠 것입니다. 더 많은 연구를하기 위해 몇 가지 키워드를 사용해도 괜찮습니다.FetchRequests to-many 관계가있는 3 개의 엔티티 코어 데이터

성분을 조리법에 연결하는 예를 들어 봅시다. 성분의 실체가 여러 조리법으로 나뉘어져 있다고 가정 해 보겠습니다. , 그리고 조리법 엔티티가 있습니다. 각각의 이름은 여러 가지 재료가 들어 있습니다. 이것에 가장 적합한 데이터 모델은 무엇입니까? 내가 무슨 짓을

는 재료로 조리법 이름을 연결하는 세 번째 테이블을 소개하는, 그래서 그냥 성분 엔티티에서와 조리법 엔티티 가리키는 두 개의 관계 (모두 일대)으로 구성되어 있습니다. 하지만 어떻게 주어진 조리법에 맞는 재료를 가져올 수 있습니까?

아마 내가 가져 오기 요청을 사용해야하지만 가져 오기에서 두 단계를 수행해야합니다. 기본적으로 "현재 제조법과 관련된 번역 엔티티의 개체와 관련된 재료 엔터티의 모든 인스턴스 가져 오기 "... 어떤 생각?

고마워요!

답변

0

코어 데이터에이 모델하려면 두 가지 방법 중 하나를 수행 할 수 있습니다

  1. 는 일대 다 관계, 각 방향으로 하나의 쌍을 사용합니다. Recipe 엔티티가 many-to-many ingredients 관계를 갖는 경우, 그 반대는 Ingredient 엔티티의 many to many recipes 릴레이션이됩니다. 당신이 일 것으로 보인다으로
  2. RecipeIngredient처럼 중간 엔티티를 사용합니다. RecipeIngredient은 모두 RecipeIngredient과 다 대다 관계를 가질 수 있지만 각각의 역수는 1 대 1 일 수 있습니다.

어느 방법을 사용하든 여전히 단일 가져 오기 요청 만 필요합니다. "Brownies"라는 조리법의 재료를 얻고 싶다고합시다. 엔터티 Recipe에 대한 인출 요청을 만들고 name like "Brownies"을 선택하는 조건자를 사용합니다. 그러면 요청과 일치하는 일련의 요리법이 제공됩니다. 그런 다음 관계를 사용하여 해당 조리법의 재료에 액세스 할 수 있습니다. 즉, 재료에 대한 다른 페치 요청이 필요하지 않습니다. 대신 첫 번째 방법을 사용하면

Recipe *recipe = [recipes anyObject]; 
NSSet *ingredientList = recipe.ingredientList; 
for (RecipeIngredient *item in ingredientList) { 
    Ingredient *ingredient = item.ingredient; 
    //...do something with the ingredient... 
} 

, 당신은에 액세스 할 수 있습니다 : 당신이 두 번째 방법을 가지고 가고 RecipeingredientList라고 RecipeIngredientsRecipeIngredient에 일대 다 관계가 ingredient입니다 - 일 관계가있다 말 좀 더 직접적으로 성분의 세트 :

Recipe *recipe = [recipes anyObject]; 
NSSet *ingredients = recipe.ingredients; 
for (Ingredient *ingredient in ingredients) { 
    //...do something with the ingredient... 
} 

어느 쪽이든는 점은 당신이 당신의 코어 데이터 저장소에서 개체를 가져 나면, 당신은 관련 데이터를 얻기 위해 더 이상 인출을 할 필요가 없다는 것입니다. Core Data는 당신을 위해 그것을 할 것입니다. 이는 데이터베이스를 직접 사용하는 것과 비교할 때 핵심 데이터를 강박하게 만드는 요소 중 하나입니다.

+0

안녕하세요. Caleb, 답변을 많이 보내 주셔서 감사합니다. 매우 자세하고 정확하게 필요한 항목입니다. 내 생각은 내가 생각하기에 데이터베이스와 같은 생각에서 온 것이기 때문에 제안 된 모델을 생각해 보겠다. 다시 한 번 감사드립니다! :) – Dan