9

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

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

在此处输入图像描述

我发现的唯一线索是: 如何在谓词中引用子实体名称来获取父实体的请求?

是否可以在我的 QuantifiedIngredient 中使用自定义属性来了解它是否是 RecipeQuantifiedIngredient?例如是RecipeQuantifiedIngredient?

非常感谢你的帮助。

4

2 回答 2

2

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

自定义属性(以标志形式存在)也适用于您。您只需在添加或删除所有recipeQuantifiedIngredient.

于 2012-06-18T10:46:47.230 回答
1

我不想花时间把它翻译成 CoreData-speak 所以这是我在 SQL 中的想法:

SELECT * FROM quantifiedIngredients WHERE recipe <> NULL

或类似的东西。这本质上是 Nikita 关于使用标志的建议,只是“标志”是属性的存在。我不知道CoreData在遇到GroceryQuantifiedIngredients没有时会如何反应recipe,我认为KVO会抛出异常。您可能会大胆地添加一个类别:

@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 是否允许您在使用谓词或 fetchedThingamabobbers 时使用某种游标,如果可以的话,我认为这是您最好的选择。不管怎样,现在是星期天下午,所以这些东西留给读者作为练习。

+1 提出一个好问题。

于 2012-06-24T20:06:35.400 回答