静态库中的 CoreData 自动迁移

Posted

技术标签:

【中文标题】静态库中的 CoreData 自动迁移【英文标题】:CoreData automatic migrations in static library 【发布时间】:2014-02-24 15:00:28 【问题描述】:

我目前正在使用 Magical Record 将数据库存储在我的 ios 应用程序中。

我将核心数据 xcdatamodeld 存储在一个静态库中,该库是我的应用程序的子项目。

应用程序可以很好地读取/写入数据库。

我刚刚向我的一个模型添加了一个属性,它应该会触发从我的模型版本自动迁移,但是这没有发生。

以下代码 [MagicalRecord shouldDeleteStoreOnModelMismatch] 返回 true,因此正在删除和创建我的数据库。

查看 Apples 自动迁移指南添加单个属性应该没问题。

我也在设置这样的 Magical Record [MagicalRecord setupAutoMigratingCoreDataStack];

我想知道是否因为核心数据 .xcdatamodeld 在子项目中,我必须做任何额外的工作 迁移成功

【问题讨论】:

【参考方案1】:

查看[NSPersistentStore addPersistantStoreWithType:configuration:URL:options:error]返回的错误后确定

它返回找不到源存储的模型。

所以我做了一些谷歌搜索,发现如果我将 App Model Version 添加到我的 .xcdatamodeld 文件中

在我的第二个版本中,我将该属性添加到同一模型中并且迁移工作正常。

我的印象是我不需要这样做,因为添加属性应该是 被认为是轻量级迁移,不需要我创建新的模型版本。

我对这个有误吗?

【讨论】:

您需要为所做的每个更改集合创建模型的新版本并保留旧版本。如果您的应用仍在开发中,您只需删除您的开发数据存储,应用将正确重建存储 轻量级迁移总是需要模型迁移。只允许不影响数据库结构的更改(如获取的属性等)。

以上是关于静态库中的 CoreData 自动迁移的主要内容,如果未能解决你的问题,请参考以下文章

静态库中的对话框资源

静态库中的 VC++ 资源

静态库中的外部指针为空,当不是静态库时工作正常

gcc找不到静态库中的函数

静态库中的 MagicalRecord:如何加载数据模型?

与静态库中的 std::string 相关的 C++ 未定义符号