使用核心数据我想获取一些数据。我的模型使用了一些抽象实体,参见附图,其中QuantifiedIngredient是一个抽象类。 我想获取至少有一个RecipeQuantifiedIngredients的Ingredient实体,但中间是QuantifiedIngredient,这是一个抽象类。
我该怎么做,如何在NSPredicate中测试抽象类的实际类型?有什么想法或建议吗?
我发现的唯一线索是: How can you reference child entity name in a predicate for a fetch request of the parent entity?
在QuantifiedIngredient中使用自定义属性来知道它是否是RecipeQuantifiedIngredient?例如isRecipeQuantifiedIngredient?
非常感谢你的帮助。
答案 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。