核心数据迁移:更改持久存储类型

Posted

技术标签:

【中文标题】核心数据迁移:更改持久存储类型【英文标题】:Core Data Migration: Changing Persistent Store ofType 【发布时间】:2017-01-16 10:38:18 【问题描述】:

我真的需要帮助来更改核心数据结构。我已经使用现有数据库构建了我的应用程序,但现在我想使用 Seam cloudKit 同步,我必须更改我的代码,但如果我这样做,我的应用程序将会崩溃! (删除并再次构建应用程序不是一种选择。正如我提到的那样,它已经有了它的数据结构)

NSPersistentStoreCoordinator我使用了以下代码:

try coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: [NSMigratePersistentStoresAutomaticallyOption: true,NSInferMappingModelAutomaticallyOption: true])

现在我必须使用它:

try coordinator.addPersistentStore(ofType: SMStore.type, configurationName: nil, at: url, options: [NSMigratePersistentStoresAutomaticallyOption: true,NSInferMappingModelAutomaticallyOption: true]) as? SMStore

正如你所注意到的,我必须将 ofType 从 NSSQLiteStoreType 更改为 SMStore.type

有没有办法做到这一点?有人知道吗?我希望有人可以提供帮助。

非常感谢。

【问题讨论】:

【参考方案1】:

您可以为此使用NSPersistentStoreCoordinator 方法migratePersistentStore(_:to:options:withType:)。此方法将现有的持久存储文件移动到新文件,并且可以更改持久存储类型。尽管名称中有“迁移”,但它与模型版本迁移没有任何关系。在这种情况下,它将持久存储迁移到新文件。

您必须使用旧存储类型添加持久存储,然后迁移到新存储类型。

【讨论】:

我做到了.. 但它总是运行错误......我试过了:link 或者那个:link 我总是得到一个错误......尝试永远不会运行..跨度> 说你遇到了一个错误而不说是什么错误总是是在浪费时间。你得到了什么错误? 此错误基于第二个链接:2017-01-18 19:15:59.901216 Seam3_Example[72047:3429091] [错误] 错误:非法尝试保存到从未打开的文件。 “这个 NSPersistentStoreCoordinator 没有持久存储(未知)。它无法执行保存操作。”。没有记录最后的错误。 2017-01-18 19:15:59.926 Seam3_Example[72047:3429091] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“此 NSPersistentStoreCoordinator 没有持久存储(未知)。它无法执行保存操作。' 我得到的这个错误是基于第一个链接..(这里我从 didFinishLaunchingWithOptions 运行迁移):“操作无法完成。(Cocoa 错误 1570。)” 您的第一条错误消息表明您尝试在之前添加旧的持久存储而不是在添加之后进行迁移。

以上是关于核心数据迁移:更改持久存储类型的主要内容,如果未能解决你的问题,请参考以下文章

核心数据迁移问题:“持久存储迁移失败,缺少源托管对象模型。”

将 Objective-C 核心数据迁移到 Swift 持久化容器

跳过核心数据迁移

数据库迁移后保存核心数据时 Cocoa 报错 134030

NSPersistentStoreCoordinator 在 ios iOS 中没有持久存储(架构不匹配或迁移失败)核心数据

快速核心数据迁移以更改属性类型