Iphone 使用新结构数据库覆盖Coredata数据库

Iphone 使用新结构数据库覆盖Coredata数据库,iphone,sqlite,core-data,Iphone,Sqlite,Core Data,好了,伙计们,我希望你们能帮我。我真的需要你的帮助 我在app store上有一个使用种子数据库的应用程序(检查应用程序委托中的“persistentStoreCoordinator”方法中是否存在数据库,如果不存在,请复制种子数据库) 问题是我改变了数据库结构,当然也改变了种子数据库结构。并将更新发布到应用商店。当用户更新并打开应用程序时,应用程序崩溃。因为检查数据库是否存在于documents文件夹中的代码可以找到该数据库,因此它将在需要新数据库结构的应用程序中使用旧数据库 我不知道怎样才能

好了,伙计们,我希望你们能帮我。我真的需要你的帮助

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

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

我不知道怎样才能克服这个问题。问题是我不能仅仅替换现有的数据库,因为这样我就不能复制种子数据库


请帮助我:)

为什么要更改数据库结构而不是数据模型?核心数据不是数据库。它的设计目的是将数据库抽象出来,这样您就不必考虑它了。如果需要直接操作数据库,则应使用SQLite


核心数据提供了自动和手动模型迁移,允许您更改数据模型,并让核心数据负责数据库。说真的,核心数据的全部要点是,您永远不必直接处理数据库。

通常您要做的是将现有数据库迁移到新的数据库模型。如果更改很简单,那么您很可能就可以进行所谓的轻量级迁移。查看一下

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

我使用了以下代码:

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

谢谢你的链接,这将是非常有帮助的。谢谢你的解释,我明白了。我将努力学习Greg C给我的迁移指南。我将尝试找到更好的解决方案。+1熟悉SQL和类似DBs的人经常会因为认为核心数据只是SQL的对象包装而感到悲伤。事实并非如此,在使用核心数据时,您为SQL学习的绝大多数技能和技巧不仅毫无用处,而且非常危险。您应该编辑您的问题,而不是发布这样的答案。