用新结构数据库覆盖Coredata数据库
好的,我希望你能帮助我。我真的需要你的帮助。用新结构数据库覆盖Coredata数据库
我对应用商店,它使用种子数据库的应用程序(检查分贝在应用程序代理的“persistentStoreCoordinator”方法存在如果不存在,复制种子DB)。
的问题是,我改变DB结构,当然种子分贝结构为好。并将更新发布到应用商店。当用户更新应用程序并打开它时,应用程序崩溃。因为检查文档文件夹中是否存在数据库的代码可以找到该数据库,因此它将使用需要新数据库结构的应用程序中的旧数据库。
我不知道我可以克服这个问题。问题是我不能只是替换现有的数据库,因为那样我就无法复制种子数据库。
请帮我:)
你为什么改变了DB结构,而不是数据模型?核心数据不是数据库。它旨在将数据库抽象出来,因此您不必考虑它。如果你需要直接操作数据库,你应该使用SQLite。
核心数据提供自动和手动两种模式的迁移,让你改变你的数据模型和具有核心数据采取DB的照顾。严重的是,核心数据的整个重点是你永远不必直接处理数据库。
通常情况下你会怎么做是对现有数据库迁移到新的数据库模型。如果这些更改很简单,那么您很可能会忽略所谓的轻量级迁移。看看Introduction to Core Data Model Versioning and Data Migration Programming Guide
感谢您的链接,这将是非常有益的。 – 2011-03-18 03:55:20
好吧,我设法通过检查应用程序打开的第一时间解决问题。如果它是真的,那么我会删除旧的数据库,然后把种子数据库(与新模型)。
我用这个代码:
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firsttimer"]) {
if ([fileManager fileExistsAtPath:storePath]) {
[fileManager removeItemAtPath:storePath error:nil];
}
[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"firsttimer"];
}
你应该编辑你的问题,而不是发布这样的答案。 – 2011-03-18 17:46:29
感谢你的解释我知道了。我将尝试研究Greg C给我的迁移指南。我会尽力找到更好的解决方案。 – 2011-03-18 04:00:50
+1熟练使用SQL和类似DB的人通常认为Core Data只是SQL的对象封装,通常会让人感到悲伤。这不是,你学习SQL的绝大多数技巧和技巧不仅在使用核心数据时是无用的,而且是非常危险的。 – TechZen 2011-03-18 15:52:27