小编Pro*_*rth的帖子

使用 CloudKit 的 CoreData:模型迁移后,所有内容都被复制

我尝试迁移我的 CoreData-Model(使用 CloudKit),它复制了我存储的所有对象。在 CloudKit 中使用 CoreData 时如何正确迁移?

概括

我在 CloudKit 中使用 CoreData。几天前,我对模型进行了一些更改,因此需要进行迁移。事情是这样的(详情见下文):

  1. 我只是在我的模型 ( Model.xcdatamodel) 中进行了更改,没有更改模型的版本并将其安装在我的 iPhone 上进行测试 -> 崩溃并显示消息“无法迁移就地存储:尝试迁移期间违反约束”。

  2. 我创建了模型的新版本 ( Model 2.xcdatamodel) 并在那里进行了更改。然后我创建了一个.xcmappingmodel来管理迁移。没有崩溃并且它起作用了,但是......

  3. 我的应用程序中的所有条目现在都重复了,这当然不是预期的。

我在模型中改变了什么:

我的原始(源)模型有两个实体 A 和 B。A 和 B 之间存在多对多映射。我做了以下更改。

  • 添加两个新实体 C 和 D,具有一个数据字段(“名称”)
  • 在两个新实体 C、D 和我现有实体之一 (A) 之间创建一对多映射

我只是创建了.xcmappingmodel-file 而没有更改其中的任何内容。对于现有实体 A 和 B,它具有接管先前数据的条目,如下所示:

destination attribute: name
value expression: $source.name
Run Code Online (Sandbox Code Playgroud)

对于现有的映射 AB(实体 B 称为“标签”),它具有: FUNCTION($manager, "destinationInstancesForEntityMappingNamed:sourceInstances:" , "TagToTag", $source.tags) 与逆关系类似。

我如何构建我的 CoreData 堆栈

我遵循了 Apple 的文档。我的代码看起来像这样(我做了一个CoreDataManager-class):

[...]
lazy …
Run Code Online (Sandbox Code Playgroud)

core-data core-data-migration ios swift cloudkit

6
推荐指数
1
解决办法
253
查看次数

标签 统计

cloudkit ×1

core-data ×1

core-data-migration ×1

ios ×1

swift ×1