我观看了2016年WWDC关于核心数据的视频,并观看了各种教程。我已经看到了使用核心数据框架创建对象以持久化到托管对象上下文的各种方法。
在示例中,我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 视频中没有看到第二个选项的演示。第三个选项是否自动插入到托管对象上下文中,或者是否应该采用某种方法将对象插入上下文中,然后使用 NSFetchedResultsController 检索所有对象。
第二个选项是 NSManagedObject
上指定的初始值设定项,它Day
子类。
第三个选项是在调用选项 2 的 Day
上定义的方便初始值设定项。
第一种选择是无稽之谈。 第一行创建插入到上下文中的Day
实例,就像选项 2 和 3 一样。 🤔第二行尝试通过传递 Day
的实例来创建Day
的实例到需要NSEntityDescription
的参数。我怀疑选项 1 应该看起来像:
let entity = NSEntityDescription.entity(forEntityName: "Day", in: CoreDataHelper.context)
let object = NSManagedObject(entity: entity, insertInto: CoreDataHelper.context)
所有选项都有相同的结果。我不确定为什么有这么多变化。这将是一个只有苹果才能回答的问题。希望这是有帮助的!