将核心数据迁移到一个干净的开始

Posted

技术标签:

【中文标题】将核心数据迁移到一个干净的开始【英文标题】:Migrating coreData to a clean start 【发布时间】:2014-03-26 17:07:54 【问题描述】:

我正在将应用更新为全新版本(重制)。一切都会变得更快,错误更少。正如其他帖子所建议的那样,我无法创建模型的另一个版本,因为我没有以前版本的应用程序代码(我开始了一个新项目)。我所拥有的只是作为更新的包标识符。我将使用核心数据,但我想删除正在更新的用户的所有旧模型和旧数据,就好像他们删除了应用程序并重新安装它一样。我如何实现这一目标?或者不需要删除任何东西,因为是不同的模型?我想要的只是防止应用程序在启动时崩溃。提前致谢。

【问题讨论】:

我可以让你写下我所有的更新吗?我已经让它们变得更快、更好和改进了,但我认为我从来没有让它们没有错误...这些年来我编写了大量代码. 如果您需要,可以通过多种方式获取模型。模型文件只不过是一个冻干的NSManagedObjectModel 实例。您可以加载它,然后很容易地检查它的内容。这样您就可以执行真正的迁移。 我知道没有什么是没有错误的哈哈,但实际版本很糟糕。 【参考方案1】:

如果您尝试使用不允许 Core Data 理解它的模型打开相同的持久存储文件,那么您会引发异常。所以你可能需要做的就是使用一个不同的文件——记住你可以在addPersistentStoreWithType:configuration:URL:options:error:中指定磁盘上的位置——为你的持久存储并要求NSFileManager删除旧的。

我认为要求删除已经不存在的文件不会受到惩罚,因此不需要任何特别复杂的逻辑。无论如何,您只是在复制文件管理器在内部执行的操作。

或者,如果您希望保留相同的文件,请将您对addPersistentStoreWithType:... 的调用附在@try/@catch 块中,并在@catch 中删除现有文件并再次尝试addPersistentStoreWithType:...

【讨论】:

以上是关于将核心数据迁移到一个干净的开始的主要内容,如果未能解决你的问题,请参考以下文章

将旧数据模型文件复制到新项目中进行轻量级核心数据迁移

通过迁移将核心数据实体及其数据移动到新的核心数据模型文件中

核心数据迁移:将字段提取到抽象实体子项

核心数据迁移是不是必要?

将核心数据从 Swift 迁移到 SwiftUI

有没有办法将数据从核心数据迁移到在线数据库?