CoreData 会复制对象吗?
Will CoreData duplicate objects?
我有一个名为 "Routine," 的 NSManagedObject,它已经保存到我的数据模型中。它与另一个名为 "Workout" 的 NSManagedObject 具有一对多关系。我想编辑例程,以便为其添加更多锻炼关系。
let routine = fetchedResultsController.objectAtIndexPath(indexPath) as! Routine
我在数据模型中编辑 Routine 的 ViewController 包含一组锻炼对象:
var myWorkouts = [Workout]()
"myWorkouts" 数组中的一些锻炼可能已经与 Routine 相关联,而其他锻炼可能没有(新锻炼)。我在每次锻炼和例程之间建立了这样的关系:
for workout in myWorkouts {
routine!.setValue(NSSet(objects: workout), forKey: "workout")
}
我的问题:如果已经创建了例程和锻炼之间的关系,上面的 for 循环是否会创建该锻炼的副本以与我的例程相关联,还是只会为以前不相关的锻炼创建新的关系?
我希望我的问题是有道理的。在此先感谢您的帮助!
例程 CoreDataProperties 文件
import Foundation
import CoreData
extension Routine {
@NSManaged var name: String?
@NSManaged var workout: Set<Workout>?
}
因此,您正在使用 Set
s,这意味着它们始终只包含每个值一次。因此,无论封闭对象(在本例中为 NSManagedObject
s)如何,其中都只有一个。你很好 - 重新声明关系不会改变任何事情。
不过,我可能会建议您可以做一些事情让您的生活更轻松:
- 如果您还没有创建具体的子类,请使用 Xcode 的内置工具,这样您就可以直接访问关系和属性。
- 在具体子类
+NSManagedObjectProperties
文件中,将那些对多关系从 NSSets?
重新定义为 Set<MyClass>?
。这允许您调用 Swift-native 函数,并且可以正常工作,因为 Set
是从 NSSet
. 桥接的
- 以后只要调用
routine.workout = workout
,比你代码定义关系的方式清晰多了。
我有一个名为 "Routine," 的 NSManagedObject,它已经保存到我的数据模型中。它与另一个名为 "Workout" 的 NSManagedObject 具有一对多关系。我想编辑例程,以便为其添加更多锻炼关系。
let routine = fetchedResultsController.objectAtIndexPath(indexPath) as! Routine
我在数据模型中编辑 Routine 的 ViewController 包含一组锻炼对象:
var myWorkouts = [Workout]()
"myWorkouts" 数组中的一些锻炼可能已经与 Routine 相关联,而其他锻炼可能没有(新锻炼)。我在每次锻炼和例程之间建立了这样的关系:
for workout in myWorkouts {
routine!.setValue(NSSet(objects: workout), forKey: "workout")
}
我的问题:如果已经创建了例程和锻炼之间的关系,上面的 for 循环是否会创建该锻炼的副本以与我的例程相关联,还是只会为以前不相关的锻炼创建新的关系?
我希望我的问题是有道理的。在此先感谢您的帮助!
例程 CoreDataProperties 文件
import Foundation
import CoreData
extension Routine {
@NSManaged var name: String?
@NSManaged var workout: Set<Workout>?
}
因此,您正在使用 Set
s,这意味着它们始终只包含每个值一次。因此,无论封闭对象(在本例中为 NSManagedObject
s)如何,其中都只有一个。你很好 - 重新声明关系不会改变任何事情。
不过,我可能会建议您可以做一些事情让您的生活更轻松:
- 如果您还没有创建具体的子类,请使用 Xcode 的内置工具,这样您就可以直接访问关系和属性。
- 在具体子类
+NSManagedObjectProperties
文件中,将那些对多关系从NSSets?
重新定义为Set<MyClass>?
。这允许您调用 Swift-native 函数,并且可以正常工作,因为Set
是从NSSet
. 桥接的
- 以后只要调用
routine.workout = workout
,比你代码定义关系的方式清晰多了。