如何一次将多个关系保存到 CoreData?

Posted

技术标签:

【中文标题】如何一次将多个关系保存到 CoreData?【英文标题】:How do I save multiple relationships to CoreData at once? 【发布时间】:2016-04-28 01:59:40 【问题描述】:

“Routine”与“Workout”是一对多的关系。两者都属于 NSManagedObject 类。我有一个名为“myWorkouts”的锻炼数组,我想在数组中的每个锻炼和例程之间建立关系。这是我的数据模型:

下面是“Routine”类的属性代码:

extension Routine 
    @NSManaged var name: String?
    @NSManaged var workout: Set<Workout>?

这是我尝试创建关系的代码:

var myWorkouts = [Workout]()

for workout in myWorkouts 
    routine!.workout = Set(arrayLiteral: workout)

我遇到的问题是,每次保存的锻炼都会覆盖上次保存的锻炼,因此,实际上,它只是将数组中的最后一次锻炼保存为与例程的关系。如何全部保存?

【问题讨论】:

【参考方案1】:

您每次通过循环都会覆盖一组关系:

for workout in myWorkouts 
    routine!.workout = Set(arrayLiteral: workout)

这相当于每次覆盖锻炼中存储的值。

routine!.workout = Set(arrayLiteral: a)
routine!.workout = Set(arrayLiteral: b)
routine!.workout = Set(arrayLiteral: c)

相反,您需要分配一个同时包含所有锻炼的 Set:

routine!.workout = Set(myWorkouts)

【讨论】:

啊,我知道我哪里出错了。我也尝试过一次并且一直出错,这是因为我的代码是例行程序!.workout = Set(arrayLiteral:myWorkouts)。我现在觉得很傻,哈哈。感谢您的帮助! 因为你有一个反向关系,你也可以简单地设置每个routine属性workout和Core Data会为你做剩下的; workout.routine = routine!

以上是关于如何一次将多个关系保存到 CoreData?的主要内容,如果未能解决你的问题,请参考以下文章

如何一次将多行保存到多个数据库表

如何一次将多个值发送到 Web 服务器 [关闭]

一次将多个操作添加到核心 - 数据关系

如何一次将数据插入和更新到 EF 多个表中

如何使用 Windows 批处理文件或 vbs 脚本一次将多个文件 1 从 2 个文件夹复制到另一个文件夹

如何一次将多个值插入到 postgres 表中?