如何知道NSPredicate中抽象实体的类类型?

时间:2012-06-14 15:16:15

标签: core-data ios5 nspredicate nsfetchrequest

使用核心数据我想获取一些数据。我的模型使用了一些抽象实体,参见附图,其中QuantifiedIngredient是一个抽象类。 我想获取至少有一个RecipeQuantifiedIngredients的Ingredient实体,但中间是QuantifiedIngredient,这是一个抽象类。

我该怎么做,如何在NSPredicate中测试抽象类的实际类型?有什么想法或建议吗?

enter image description here

我发现的唯一线索是: How can you reference child entity name in a predicate for a fetch request of the parent entity?

在QuantifiedIngredient中使用自定义属性来知道它是否是RecipeQuantifiedIngredient?例如isRecipeQuantifiedIngredient?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

如果recipe中需要RecipeQuantifiedIngredient,您可以尝试进行抓取,检查是否有ingredient.recipe。我想,那会奏效。

自定义属性(以种类为标志)也适用于您。每当您添加或删除所有recipeQuantifiedIngredient时,您只需设置和取消设置。

答案 1 :(得分:1)

我不想花时间将其翻译成CoreData,所以这是我在SQL中的想法:

SELECT * FROM quantifiedIngredients WHERE recipe <> NULL

或类似的东西。这基本上是Nikita建议使用标志,除了'标志'是属性的存在。我不知道CoreData在面对没有GroceryQuantifiedIngredients的{​​{1}}时会如何反应,我认为KVO会抛出异常。你可能会大胆地添加一个类别:

recipe

这当然要求CoreData枚举所有量化的成分,但我认为无论如何都必须这样做,并且@interface GroceryQuantifiedIngredients (KVOHack) -(id)recipe; @end @implementation GroceryQuantifiedIngredients (KVOHack) -(id) recipe { return nil; } @end 应该优化成微小的代码。另一个考虑因素是这是否会对其余代码产生不良影响;你必须打那个电话。

我完成这个时想到的另一个想法就是做这样的事情(我现在正用

松开我的伪代码):

return nil

明白我的意思?我忘了CoreData是否允许你在使用谓词或fetchedThingamabobbers时使用某种光标,如果它确实比我认为这是你最好的选择。无论如何,这是周日下午,所以这些东西留给读者练习。

为一个好问题+1。