“转储”核心数据堆栈的最佳方法是什么?

时间:2011-02-21 19:17:06

标签: ios core-data

我的应用程序需要能够与服务器断开连接并随心所欲地连接到另一个服务器,这需要转储我们拥有的任何持久存储。这里的问题是释放'主'管理对象上下文意味着我在其中存在的任何错误,这会导致各种意外的小问题和崩溃。

有没有更好的方法来“重置”我的堆栈/托管对象,而不仅仅是在我的Core Data堆栈中的所有内容上调用release?

2 个答案:

答案 0 :(得分:2)

您需要从上到下关闭Core Data堆栈。

  1. 确保除托管对象上下文之外的任何对象都不保留托管对象,例如确保对象不保存在UI控制器拥有的数组中。
  2. 保存托管对象上下文以清除任何松散的末尾。
  3. 完全释放上下文并将其取消。无论如何,上下文不应该由多个对象保留,例如应用程序委托。
  4. removePersistentStore:error:发送给持久性商店协调员。
  5. 使用标准文件操作删除实际的商店文件。
  6. 在运行中更改这样的核心数据很困难,因为Core Data不仅仅是一个悬挂在应用程序侧面的小数据库。它旨在充当应用程序整个模型层。由于Apple真的进入了模型 - 视图 - 控制器设计,因此该模型是该程序的实际核心(因此是Core Data的名称。)因此,您无法真正打开和关闭仅仅是SQL数据库的方式。

    您可能实际上想要重新考虑您的设计,以便您可以更改服务器而无需关闭整个数据模型。例如。只需删除与未使用的服务器关联的所有托管对象。

答案 1 :(得分:1)

如果您的意思是想要对所有对象进行故障,那么将从持久性存储中再次获取它们,

[managedObjectContext reset];