托管对象上下文保存和refreshObject之间有什么区别:mergeChanges:

时间:2013-03-15 22:26:36

标签: iphone cocoa-touch core-data nsmanagedobjectcontext

你好

之间有什么区别
  [self.context refreshObject:site mergeChanges:YES];

  [self.context save:nil];

有时我会同时使用它们,有时我只使用save。它适用于两种情况。

1 个答案:

答案 0 :(得分:8)

-save:将您所做的更改保存到上下文中的任何托管对象。这意味着它们会被刷新到持久性存储协调器,然后持久性存储协调器将它们写入持久性存储,然后将其写入磁盘(假设磁盘支持的存储)。

另一方面,-refreshObject:mergeChanges:做了一些完全不同的事情。它从持久性存储协调器(从持久性存储读取,等等)读取对象的当前状态。为YES传递mergeChanges意味着保持对对象的任何本地修改,并仅更新未更改的字段。这与-save:几乎相反。

作为一项简单的思想实验,如果您运行-save:然后终止您的应用,则在下次启动时,您的修改后的数据仍然可用。如果您运行-refreshObject:mergeChanges:然后终止您的应用,则您的任何本地更改都将丢失。