2012-01-16 58 views
2

我创建了一个应用程序,它使用Core Data来存储信息。今天,我对数据模型进行了一些更改,并重新创建了更改数据模型的代码文件。当我再次尝试在iPad上运行应用程序时,它抱怨iPad上的数据存储区与我试图访问的数据存储区之间发生冲突(我向其中一个对象添加了一个字段)。我通过从iPad上完全删除应用程序并将其替换为新版本来解决此问题。Objective C - 升级NSManagedObject

我只是想知道现在,当我发布更新时,对当前使用该应用程序的用户的影响是什么?他们是否也会丢失所有数据?他们会遇到那个丑陋的错误信息还是崩溃?或者核心数据为我魔法升级数据存储?

问候, EZFrag

回答

4

看到苹果核心数据迁移指南为:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html

“您只能使用用于创建它的托管对象模型打开核心数据存储。因此,更改模型会使其与以前创建的存储不兼容(并且无法打开)它。如果更改模型因此,您需要更改现有门店新版本变化的商店格式称为迁移。

要迁移的数据商店,你需要用于创建模型的两个版本,而当前版本您可以创建一个包含多个版本的托管对象模型的版本化模型,在版本化模型中,您将一个版本标记为当前版本,然后Core Data可以使用此模型打开使用任何模型创建的持久性商店版本,并将商店迁移到当前版本。不过,为帮助Core Data执行迁移,您可能需要提供有关如何从一个模型版本映射到另一个版本的信息。这些信息可能以版本模型本身的提示形式出现,也可能在您创建的单独映射模型文件中。“

+0

此外,我建议从自动迁移开始,因为它涵盖了大部分数据模型变化的情况。 – 2012-01-16 17:42:14

-1

为了发展,你需要从设备或模拟器将其删除。
对于部署,您需要经历一个相当不愉快的过程!它在文档中有描述,但基本上,您需要创建另一个版本的数据存储并将数据迁移到新版本(如果您有任何需要迁移的数据)。 如果你不需要迁移任何数据,你的生活会更容易。

如果这是一个企业应用程序,或者你可以要求你的用户删除并重新安装应用程序,那么你不需要太担心。

看到这个http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html

+0

我不同意这是一种不愉快的情况。任何时候当您在ANY框架中更改数据模型时必须进行迁移工作原理核心数据使得90%的迁移情况非常容易 – 2012-01-16 17:41:39

+0

与其他框架相比,Coredata可能更容易,但对我来说它仍然“不高兴”,我承认我不应该说主观的东西,但我支持它。 – Ali 2012-01-16 18:02:30