iOS Swift – 具有复杂数据关系的核心数据示例

前端之家收集整理的这篇文章主要介绍了iOS Swift – 具有复杂数据关系的核心数据示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在努力了解如何使用Core Data建立复杂的数据关系.

在我的应用程序中,我目前有一个配方,成分和食谱成分的实体,它将配料与食谱结合在一起.

我没有遇到任何从这个联合实体获取数据的例子.如果有人可以给出一个像Swift的RecipeIngredient这样的实体的例子,我会感激的.

解决方法

您没有看到与RecipeIngredient实体类似的示例的原因是,您不需要像Core Data这样的联合实体.您正在处理核心数据,就像它是一个关系数据库一样,您通常会使用连接表,以便在实体之间创建高效的多对多关系.如 Core Data Programming Guide Many-to-Many Relationships小节所述,Core Data所需要做的就是在两个实体之间双向指定一对多关系.请注意文档中的括号:

(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在两种语言中都是一样的.

猜你在找的iOS相关文章