2017-03-18 74 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