我的应用程序必须能够断开与服务器的连接,并立即连接到另一台服务器,这需要转储我们拥有的所有持久性存储。这里的问题是释放“主”托管对象上下文意味着我在其中放置的任何对象都围绕故障,这会导致各种意外的小问题和崩溃。

有没有比在Core Data堆栈中的所有内容上调用release更好的方法来“重置”在程序周围乱堆的堆栈/托管对象?

最佳答案

您需要从上至下关闭核心数据堆栈。

  • 确保除托管对象上下文以外的任何对象均不保留任何托管对象。确保对象没有保存在UI控制器拥有的数组中。
  • 保存托管对象的上下文以清除所有松散的结局。
  • 完全释放上下文并将其无效。无论如何,上下文绝不能由多个对象(例如应用程序委托)保留。
  • removePersistentStore:error:发送到持久性存储协调器。
  • 使用标准文件操作删除实际的存储文件。

  • 即时更改核心数据非常困难,因为核心数据不仅仅是应用程序一侧的一个小型数据库。它旨在用作应用程序的整个模型层。由于Apple确实参与了Model-View-Controller设计,因此模型是程序的实际核心(因此使用Core Data的名称。)因此,您无法像单纯的SQL数据库那样真正地打开和关闭它。 。

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

    10-08 08:14
    查看更多