如何解决带有CloudKit的CoreData:模型迁移后,所有内容都会重复 摘要我在模型中所做的更改:我如何构建我的CoreData堆栈
我试图迁移我的CoreData-Model(使用CloudKit),它复制了我存储的所有对象。将CoreData与CloudKit结合使用时如何正确迁移?
摘要
我正在将CoreData与CloudKit一起使用。几天前,我对模型进行了一些更改,因此需要进行迁移。这就是它的运行方式(有关详细信息,请参见下文):
-
我只是在模型(
Model.xcdatamodel
)中进行了更改,而没有更改模型的版本,而是将其安装在iPhone上进行测试->出现崩溃消息,提示“无法迁移就地存储:尝试迁移期间违反约束”。 -
我创建了模型的新版本(
Model 2.xcdatamodel
)并在那里进行了更改。然后,我创建了一个.xcmappingmodel
来管理迁移。没有崩溃,但是行得通,但是... -
我的应用程序中的所有条目现在都已复制,这当然不是预期的。
我在模型中所做的更改:
我的原始(源)模型具有两个实体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 举报,一经查实,本站将立刻删除。