在我的应用程序中,我目前有一个配方,成分和食谱成分的实体,它将配料与食谱结合在一起.
我没有遇到任何从这个联合实体获取数据的例子.如果有人可以给出一个像Swift的RecipeIngredient这样的实体的例子,我会感激的.
解决方法
(If you have a background in database management and this causes you concern,don’t worry: if you use a sqlite store,Core Data
automatically creates the intermediate join table for you.)
这是您应该建模的关系的例证,从Xcode的模型编辑器直接撕下来:
如果您仍然希望看到如何执行此操作的示例,请搜索“核心数据多对多关系”,您会发现很多.你可以从StackOverflow开始一个快速搜索引发了一些例子,其中包括How do you manage and use “Many to many” core data relationships?.
更新:从您的评论中,我明白您要使用中间对象来添加食谱和成分之间关系的信息.那就是另一个实体有需要的情况.所以让我们说你的模型看起来像这样:
您似乎不太可能直接获取这些RecipeIngredient对象之一;你可能只是按照适当的关系.因此,您可以创建一个提取请求,以查找名称与“巧克力蛋糕”匹配的所有食谱. (有很多示例请求使用文档和网络中的谓词,所以我不会这样做).您的提取请求将返回一组可以称为cakeRecipes的配方,但是您可能只对一个兴趣:
Recipe *cake = cakeRecipes.firstObject;
现在,你想知道你的蛋糕的成分是什么?这是一个成分列表:
NSArray *ingredientNames = cake.ingredients.ingredient.name;
for (RecipeIngredient *i in cake.ingredients) { NSLog(@"%@ %@",i.amount,i.ingredient.name); }
或者,您可以使用提取请求查找匹配“芹菜”的成分,将结果存储在芹菜中.之后,您可能会寻找包括芹菜在内的食谱:
Ingredient *celery = celeries.firstObject; NSArray *recipes = celery.recipes.recipe
如果这没有帮助,也许你可以更具体地解决这个问题.此外,我知道你要求Swift,但是我的手指仍然习惯于Obj-C,并且语言细节在这里并没有真正发挥作用 – Core Data在两种语言中都是一样的.