在运行时动态创建核心数据实体

时间:2015-04-28 00:50:36

标签: ios swift core-data

我需要能够在运行时创建新的核心数据实体。我编写了以编程方式创建对象的代码,但是,我无法在运行时添加实体,因为模型是不可变的。

我的问题与这篇文章类似,但没有令人满意的答案:How to dyanmic create a new entity (table) via CoreData model?

有关更改核心数据模型的文档说明:

  

托管对象模型在对象使用之前是可编辑的   图形管理器(托管对象上下文或持久性存储)   协调员)。这允许您动态创建或修改它们。   但是,一旦使用模型,就不能更改它。这是   在运行时强制执行 - 当对象管理器首次使用a获取数据时   模型,整个模型变得不可编辑。任何企图   在该点之后导致模型或其任何子对象变形   被抛出的异常。 如果您需要修改正在使用的模型,   创建副本,修改副本,然后丢弃对象   旧模型。

但是,我不清楚这究竟是什么意思 - 一旦使用持久性存储协调器或者不能更改单个实体的属性/等,整个核心数据模型就无法更改。

要明确,我不想更改当前实体的属性,我只想添加新实体。我不得不使用迁移来添加新实体,这似乎很奇怪。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

文档很清楚。

  1. 复制模型。
  2. 将更改应用于新副本。
  3. 销毁您的旧MOC,持久性商店协调员以及从中创建的所有对象。
  4. 如有必要,请应用迁移。
  5. 使用您更新的模型创建新的核心数据堆栈(MOC,PSC等)。
  6. 迁移可能是一个棘手的问题,但它应该是可行的。