NSManagedObjectContext重置和回滚之间有什么区别?

时间:2011-11-30 01:07:47

标签: objective-c core-data nsmanagedobjectcontext

文档说:

- (void)reset
     

将接收器返回其基本状态。

     

讨论

     

所有接收方的托管对象都被“遗忘”。如果您使用此方法,则应确保您也放弃对使用接收方获取的任何托管对象的引用,因为它们之后将无效。


- (void)rollback
     

从撤消堆栈中删除所有内容,放弃所有插入和删除,并将更新的对象恢复为其上次提交的值。

     

讨论

     

此方法不会从持久性商店或商店中重新获取数据。

似乎在对我的上下文进行一些更改后,调用这两个方法将完全相同:丢弃更改并将更新的对象恢复为其上次提交的值。那么-reset实际上做了什么?

2 个答案:

答案 0 :(得分:39)

关键部分在引用

  

所有接收者的管理对象都被“遗忘”。

- (void)reset;将为您提供一个干净的NSManagedObjectContext,其中没有任何对象,并且文档说明您拥有的任何NSManagedObject应该被丢弃,因为它们不再有效。< / p>

- (void)rollback只会将NSManagedObject恢复为其持久值

答案 1 :(得分:12)

-reset-rollback不同,因为它会使从上下文中提取的任何NSManagedObject无效。试图使用这些对象可能会引发异常。但是-rollback只会丢弃未保存的更改。

相关问题