在应用版本等之间访问 CoreData 实体

Posted

技术标签:

【中文标题】在应用版本等之间访问 CoreData 实体【英文标题】:Accessing a CoreData entity between app versions, etc 【发布时间】:2011-03-24 01:46:00 【问题描述】:

我继承了一个项目,该项目使用 CoreData 进行某种类型的数据存储。我想从应用程序中删除 CoreData 并将数据转换为不同的格式...

在开发其他功能的过程中,我已经从应用程序中删除了 CoreData 框架和模型声明,并不期望需要转换旧数据。

但现在我确实需要转换旧数据。所以我采取的第一步是回到源代码管理,从旧版本中挖掘出 xcdatamodel 文件并将它们重新插入应用程序。

然后我去了一个旧版本的应用程序,安装在设备上,创建了一些数据......

然后,当我返回“重新安装”CoreData 的较新版本的应用程序时,我收到一个崩溃,声称在托管对象上下文中找不到相关数据实体。我对拼写和语法进行了三重检查,它检查出来了。

我觉得我可能缺少一些重要的配置,以使其识别声明实体的 xcdatamodel 文件。

任何见解都会有所帮助。

【问题讨论】:

【参考方案1】:

核心数据架构版本是什么?你确定你有正确的版本?如果所有其他方法都失败了,您可以尝试的一件事就是打开核心数据用于其后备存储的 sqlite 数据库文件并编写您自己的迁移例程。

【讨论】:

+1 表示您可以直接使用 SQLite 手动迁移数据。 我认为它是版本化的,但我相信我使用的是正确的版本。两个版本之间的 XCDataModel 字节对字节相同。它确实适用于旧版本。只是使用较新版本的应用程序..它似乎无法找到实体。【参考方案2】:

您是否在“那个”旧版本之后添加了新实体?如果是,那么您需要为新版本编写迁移代码。

【讨论】:

不,架构自旧版本以来根本没有改变【参考方案3】:

我犯了一个语法缺陷,导致无法正确加载完整的上下文……当我改变它时,一切都正常加载了。

有时这些框架会给出最具误导性的错误...

【讨论】:

以上是关于在应用版本等之间访问 CoreData 实体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CoreData 中对实体之间的相对分数进行建模

SwiftUI 中会话之间的选定 CoreData 记录

CoreData应用程序的维护

如何在一个类中创建 CoreData 实体并在另一个类中访问?

如何基于另一个实体的一对多关系访问 CoreData 实体?

iphone coredata 删除通过关系连接的两个实体之间的记录