将核心数据迁移到一个干净的开始
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:...
。
【讨论】:
以上是关于将核心数据迁移到一个干净的开始的主要内容,如果未能解决你的问题,请参考以下文章