带有CloudKit的CoreData:模型迁移后,所有内容都会重复 摘要我在模型中所做的更改:我如何构建我的CoreData堆栈

问题描述

我试图迁移我的CoreData-Model(使用CloudKit),它复制了我存储的所有对象。将CoreData与CloudKit结合使用时如何正确迁移?

摘要

我正在将CoreData与CloudKit一起使用。几天前,我对模型进行了一些更改,因此需要进行迁移。这就是它的运行方式(有关详细信息,请参见下文):

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

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

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

我在模型中所做的更改:

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

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

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

destination attribute: name
value expression: $source.name

对于现有的映射A-B(实体B被称为“标签”),它具有: FUNCTION($manager,"destinationInstancesForEntityMappingNamed:sourceInstances:","TagToTag",$source.tags) 逆关系也是如此。

我如何构建我的CoreData堆栈

我遵循了Apple的文档。我的代码如下所示(我制作了CoreDataManager类):

[...]
lazy var persistentContainer: NSPersistentContainer = {
    let container: NSPersistentContainer
    container = NSPersistentCloudKitContainer(name: containerName)
    let storeDescription = container.persistentStoreDescriptions.first
    storeDescription?.type = NSsqliteStoreType

    container.loadPersistentStores { (_,error) in
        if let error = error as NSError? {
            fatalError("Unresolved error when loading CoreData persistent stores: \(error),\(error.userInfo)")
        }
    }
    return container
}()

lazy var mainContext: NSManagedobjectContext = {
    let context = self.persistentContainer.viewContext
    context.automaticallyMergesChangesFromParent = true

    return context
}()
[...]

我真的不知道我做错了什么或如何解决。如果有人能指出我正确的方向,将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)