Swift 3 核心数据 - Entity(context:) vs Entity(entity: Location.entity(), insertInto: context)

Swift 3 Core Data - Entity(context:) vs Entity(entity: Location.entity(), insertInto: context)

我观看了 2016 WWDC Core Data 视频并查看了各种教程。我已经看到了使用核心数据框架创建对象以持久保存到 managedObjectContext 中的各种方法。

在示例中,我将 Day 作为一个实体。我想为用户使用该应用程序的每一天创建一个新的 Day 对象。

我遇到过:

第一个选项

let entity = NSEntityDescription.insertNewObject(forEntityName: "Day", into: CoreDataHelper.context)
let object = NSManagedObject(entity: entity, insertInto: CoreDataHelper.context)

第二个选项

let object = Day(entity: Day.entity(), insertInto: CoreDataHelper.context)

第三个选项

let object = Day(context: CoreDataHelper.context)

并且知道人们还想出了其他的可能性。

下面两个选项有什么区别,因为我在WWDC视频中没有看到第二个选项的演示。第三个选项是自动插入到 managedObjectContext 中,还是应该采取某种方法将对象插入到上下文中,然后使用 NSFetchedResultsController 检索所有对象。

第二个选项是 NSManagedObject 上的指定初始值设定项,它是 Day 的子类。

第三个选项是在 Day 上定义的便利初始值设定项,它调用选项 2。

第一个选项是废话。第一行创建一个插入上下文的 Day 实例,就像选项 2 和 3 一样。第二行尝试通过传递 [=] 的实例来创建 Day 的实例12=] 到需要 NSEntityDescription 的参数。我怀疑选项 1 应该是这样的:

let entity = NSEntityDescription.entity(forEntityName: "Day", in: CoreDataHelper.context)
let object = NSManagedObject(entity: entity, insertInto: CoreDataHelper.context)

所有选项都具有相同的结果。我不确定为什么会有这么多变化。这是一个只有 Apple 才能回答的问题。希望这对您有所帮助!