【发布时间】:2017-07-01 06:54:49
【问题描述】:
如果我创建一个核心数据对象,然后决定放弃更改而不是保存它,我应该如何实现?据我所知,以下两种方法都有效:
// 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)
我应该选择哪一个?
【问题讨论】:
-
根据 Apple Docs,
reset()是将上下文返回到其基本状态。 “所有接收者的管理对象都被“遗忘”了。如果使用此方法,则应确保同时丢弃对使用接收器获取的任何托管对象的引用,因为之后它们将无效。" -
你到底想要什么?删除特定数据还是删除所有数据?
-
@Lawliet 是的,使用
reset()确实给我带来了一些麻烦,因为管理对象上下文正在其他地方使用。 -
如果您还没有提交更改,我会推荐
rollback,因为它“从撤消堆栈中删除所有内容,丢弃所有插入和删除,并将更新的对象恢复到它们最后提交的值”。