CoreData会复制对象吗?

时间:2016-04-26 05:28:21

标签: ios swift core-data nsmanagedobject

我有一个名为“Routine”的NSManagedObject,它已经保存到我的数据模型中。它与另一个名为“Workout”的NSManagedObject有很多关系。我想编辑例程,以便为它添加更多的锻炼关系。

let routine = fetchedResultsController.objectAtIndexPath(indexPath) as! Routine

在我的数据模型中编辑Routine的ViewController包含一个Workout对象数组:

var myWorkouts = [Workout]()

“myWorkouts”阵列中的一些训练可能已经与Routine相关联,而其他人可能没有(新训练)。我在每个锻炼和例程之间创建了一个关系:

for workout in myWorkouts {
    routine!.setValue(NSSet(objects: workout), forKey: "workout")
}

我的问题:如果已经创建了一个Routine和一个Workout之间的关系,那么上面的for循环是否会创建该训练的副本以与我的例程相关联,或者它是否只会创建以前没有关联的锻炼的新关系?

我希望我的问题有道理。在此先感谢您的帮助!

常规CoreDataProperties文件

import Foundation
import CoreData

extension Routine {

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

}

enter image description here

1 个答案:

答案 0 :(得分:3)

因此,您正在使用 $.ajax({ type: "POST", url : "{{url('ajaxteach')}}", data : dataString, success : function(data){ console.log(data); } s,这意味着它们只会始终包含每个值。因此,无论封闭对象(在本例中为Set s),都只有一个。你很好 - 重新说明这种关系不会改变任何事情。

但是,我可能会建议您可以做一些事情来让您的生活更轻松:

  1. 如果您还没有,请使用Xcode的内置工具创建具体的子类,以便直接访问关系和属性。
  2. 在具体的子类NSManagedObject文件中,重新定义从+NSManagedObjectPropertiesNSSets?的那些多对多关系。这允许您调用Swift本机函数,并且正常工作,因为Set<MyClass>?Set桥接。
  3. 将来,只需致电NSSet,这比您的代码定义设置关系的方式更清晰。