使用新结构DB覆盖Coredata DB

时间:2011-03-17 22:32:11

标签: iphone sqlite core-data

好的,我希望你帮助我。我真的需要你的帮助。

我在app store上有一个使用种子数据库的应用程序(检查app委托中的“persistentStoreCoordinator”方法中是否存在db,如果不存在则复制种子DB)。

问题是我改变了数据库结构,当然也改变了种子数据库结构。并将更新发布到应用商店。当用户更新应用程序并打开它时,应用程序崩溃。因为检查文档文件夹中是否存在db的代码可以找到db,所以它将使用需要新db结构的app中的旧db。

我想知道如何克服这个问题。问题是我不能只替换现有的数据库,因为那时我将无法复制种子数据库。

请帮帮我:)。

3 个答案:

答案 0 :(得分:2)

为什么要更改数据库结构,而不是数据模型?核心数据不是数据库。它旨在抽象出数据库,因此您不必考虑它。如果您需要直接操作数据库,那么您应该使用SQLite。

Core Data提供自动和手动模型迁移,允许您更改数据模型并让Core Data负责数据库。说真的,Core Data的全部内容是你永远不必直接处理数据库。

答案 1 :(得分:0)

通常,您要做的是将现有数据库迁移到新数据库模型。如果更改很简单,您很可能会放弃所谓的轻量级迁移。看看Introduction to Core Data Model Versioning and Data Migration Programming Guide

答案 2 :(得分:0)

好的,我设法通过检查应用程序是否第一次打开来解决问题。如果是,那么我将删除旧数据库,然后将种子数据库(使用新模型)。

我使用了这段代码:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firsttimer"] ) {
    if ([fileManager fileExistsAtPath:storePath]) {
        [fileManager removeItemAtPath:storePath error:nil];
    }
    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"firsttimer"];
}