2017-07-01 128 views
2

如果我創建一個核心數據對象,然後決定放棄更改而不是保存它,我該如何實現?據我所知,這兩種下列方法工作:核心數據刪除與重置

// 1

let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
let object = CoreDataObject(context: managedObjectContext) 
... 
managedObjectContext.reset() 

// 2.

let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
let object = CoreDataObject(context: managedObjectContext) 
... 
managedObjectContext.delete(object) 

哪一個我應該選擇?

+0

看看這個答案:https://stackoverflow.com/a/32210346/4468859 –

+0

根據Apple Docs,reset()是將上下文返回到它的基本狀態。 「所有接收者的被管理對象都被」遺忘「了。如果你使用這種方法,你應該確保你也放棄了對使用接收者獲取的任何被管理對象的引用,因爲之後它們將會失效。 – Lawliet

+0

你想要什麼?刪除特定數據或刪除每個數據? – Roy

回答

1

正如你想放棄更改,你應該使用重置或回滾。
如果您想從持久性存儲中刪除(已保存並保留的記錄),則必須使用delete。
例如,核心數據中存在記錄。你獲取並刪除它。
但你已經提取了一些記錄,但你想丟棄這個提取你應該使用重置

重置:它給你一個乾淨的NSManagedObjectContext沒有對象。
回滾:它丟棄未保存的更改。
https://developer.apple.com/documentation/coredata/nsmanagedobjectcontext/1506942-rollback

刪除一切從撤消堆棧,丟棄所有插入和刪除 ,並恢復更新的對象,以他們的最後承諾 值。

+0

你有參考嗎? –

+0

@BrightFuture看看這個:stackoverflow.com/a/32210346/4468859但我會搜索更好的參考。 –

+0

很好的答案!但是請注意,我還沒有保存過,所以'rollback'實際上什麼都不做,但是知道:) –

1

我從蘋果公司的documentation的一些信息:

刪除(_ :)

指定應從其持久性存儲中刪除時提交更改的對象。

提交更改時,對象將從uniquing表中刪除。如果對象尚未保存到持久性存儲中,則只需將其從接收器中刪除即可。

到目前爲止使用delete方法沒有造成錯誤,比較的reset意外崩潰。