2012-06-14 4 views
9

핵심 데이터를 사용하여 일부 데이터를 가져오고 싶습니다. 제 모델은 QuantifiedIngredient가 추상 클래스 인 첨부 된 그림을 참조하여 일부 추상 엔티티를 사용합니다. 적어도 하나의 RecipeQuantifiedIngredients가있는 성분 엔티티를 가져오고 싶지만, 중간에는 추상적 인 클래스 인 QuantifiedIngredient가 있습니다.NSPredicate에서 추상 엔티티의 클래스 유형을 어떻게 알 수 있습니까?

NSPredicate에서 추상 클래스의 실제 유형을 테스트하려면 어떻게해야합니까? 어떤 생각이나 제안? 내가 찾은

enter image description here

유일한 단서였다 How can you reference child entity name in a predicate for a fetch request of the parent entity?

그것이 RecipeQuantifiedIngredient 있는지 알고 내 QuantifiedIngredient에서 사용자 지정 속성을 작동겠습니까? 예를 들어 isRecipeQuantifiedIngredient?

도움을 주셔서 감사합니다.

답변

1

는 SQL 내 생각이다. 이는 '플래그'가 속성의 존재라는 것을 제외하고는 기본적으로 니키타가 제안한 플래그 사용에 대한 제안입니다. recipe이없는 GroceryQuantifiedIngredients에 직면했을 때 CoreData가 어떻게 반응할지, KVO가 예외를 throw한다고 생각합니다. 카테고리 추가로 당신은 너무 대담 수 있습니다

@interface GroceryQuantifiedIngredients (KVOHack) 
-(id)recipe; 
@end 

@implementation GroceryQuantifiedIngredients (KVOHack) 
-(id) recipe { return nil; } 
@end 

이 물론 CoreData 모든 quantifiedIngredients을 열거 할 필요를,하지만 난 그렇게 어쨌든해야 할 것 추정하고, 상기 return nil가 작은 코드로 최적화해야합니다. 다른 고려 사항은 이것이 나머지 코드에 나쁜 영향을 줄지 여부입니다. 그 전화를해야합니다. 나는이 마무리로 마음에 팝업

또 다른 아이디어는 이런 일을하는 것입니다 (나는 이제 정말 느슨한 내 의사 코드는군요) :

SELECT * FROM quantifiedIngredients WHERE [i respondsToSelector:@selector(recipe)]; 

무슨 뜻인지보기? CoreData를 사용하면 predicates 나 fetchedThingamabobbers로 작업 할 때 어떤 종류의 커서로 재생할 수 있는지 여부를 잊어 버렸습니다. 어쨌든 그것은 일요일 오후이므로 물건을 독자를위한 운동으로 남겨 두었습니다.

+1 좋은 질문입니다.

+0

문제는 상속이나 다 대다 관계가없는 SQL이 엔티티 관계 모델을 사용한다는 것입니다. 따라서 Core Data가 상속과 다 대다 관계가있는 객체 모델을 사용하므로 SQL 수준에서 작업하는 것은 의미가 없습니다.그래서, C++로 프로그램을 만들고 어셈블러에서 약간의 수정을하는 것과 같습니다 (물론 그렇게 무겁지는 않습니다). – Ricardo

+0

당신이 respondsToSelector에 대해 말하고자하는 것은 className을 호출하는 것으로 보이지만 SQL 상주 저장소에서는 작동하지 않지만 다른 사람들과도 작동합니다. 그것은 흥미 롭습니다. className 또는 respondsToSelector 외에 캐스팅은 어떻게해야합니까? 나는 일주일 전에 애플에게 이메일을 보냈고 그들은 이것에 관해 연구해야한다고 (유료 질문) 말해 줬다. – Ricardo

+0

당신은 대답이 없지만 당신이 말한 것은 매우 흥미 롭습니다. 고마워. – Ricardo

2

RecipeQuantifiedIngredientrecipe이 필요한 경우 가져 오기를 시도하면 ingredient.recipe이 있는지 확인합니다. 내 생각에, 그것이 효과가있을 것입니다.

깃발 종류의 사용자 지정 속성도 사용할 수 있습니다. recipeQuantifiedIngredient을 모두 추가하거나 삭제할 때마다 설정하고 해제해야합니다. 그런

SELECT * FROM quantifiedIngredients WHERE recipe <> NULL 

또는 무언가 : 나는 그래서 여기 CoreData 발언으로이 번역 시간이 걸릴 싶지 않아

+0

NSPredicate에서 상속을 처리하는 것이 가능한지 실제 질문입니다. 이미 플래그를 추가하는 방법에 대해 생각해 보았지만 모델링의 관점에서 볼 때 문제가 될 수 있지만 더러운 솔루션입니다. 어쨌든 고마워. – Ricardo

관련 문제