2017-03-18 37 views
1

Ive观看了2016年WWDC核心数据视频并查看了各种教程。我已经看到了使用Core Data Framework创建一个对象以坚持managedObjectContext的各种方法。Swift 3核心数据 - 实体(context :) vs Entity(entity:Location.entity(),insertInto:context)

在示例中,我将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) 

,知道已经有其他的可能性人有COM呃,以及。

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

+0

好像你必须在你的Day类中初始化(),一个参数为单参数,一个参数为多参数。 –

+0

@TusharSharma我很抱歉,我不知道你的意思。我只是要求澄清什么是最好的方法来创建一个对象,并将其坚持到CoreData – lifewithelliott

+0

纠正我的意思是在你的Day类中有两个初始化器。类型为NSManaedObject。 –

回答

3

第二个选项是上NSManagedObject指定初始化,这Day子类。

第三个选项是上Day限定的便利初始化调用选项2.

第一个选项是无义。第一行创建插入上下文Day一个实例,就像选项2和3的第二行试图通过使Day 一个实例给需要的NSEntityDescription一个参数来创建的Day一个实例。我怀疑选项1应该看起来像:

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

所有的选项有同样的结果。我不知道为什么有这么多的变化。这只是苹果可以回答的一个问题。希望这有帮助!

+2

非常有用谢谢! – lifewithelliott