【问题标题】:How do I save multiple relationships to CoreData at once?如何一次将多个关系保存到 CoreData?
【发布时间】: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)
}

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

【问题讨论】:

    标签: ios swift core-data nsmanagedobject


    【解决方案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!
    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多