在应用版本等之间访问 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 实体并在另一个类中访问?