2013-08-26 54 views
0

我有一个功能强大的应用程序,主要是面向数据库的。我的客户目前正在使用该应用程序,它有大量预先存在的保存数据(注意:它全部是本地的,不保存在在线数据库中)。问题是,我知道当我更新数据模型时,我将不得不卸载然后重新安装应用程序,否则它将因数据模型中的不一致而崩溃。有什么方法可以在更新数据模型的同时保存数据吗?保存核心数据?

+1

http://mobile.tutsplus.com/tutorials/iphone/core-data_schema-versioning-and-lightweight-migrations/ –

回答

3

我知道当我更新数据模型时,我将不得不卸载然后重新安装应用程序,否则它将因数据模型中的不一致而崩溃。

不是真的,除非你不打算处理这个变化。核心数据支持将数据从一个数据模型版本迁移到新数据模型,以便现有数据存储更新以使用新模型,而无需卸载或执行其他极端步骤。在大多数情况下,它甚至是自动的 - 你只需告诉它来处理变化。

NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@YES, 
    NSInferMappingModelAutomaticallyOption:@YES}; 


if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { 
    .... 
} 

如果你改变只包括一个或多个以下的这一工程:

  • 添加或移除属性
  • 更改属性的具体地说,在添加持久性存储时,使用options参数“可选”标志(假设您将它设为非可选项,则提供默认值)
  • 重命名实体或属性
  • 添加,删除或重命名实体
  • 添加父母或子女的实体,或移动属性不同点在层次
  • 改变从一对一的关系,以一对多

如果你重命名无论如何,您需要设置重命名标识符,以便Core Data知道如何迁移。

如果这还不够,Core Data支持非自动迁移有几种不同的方式。这在Apple的文档中有详细介绍,我不会在这里重现。

+0

这正是我所期待的。我不知道我可以自动迁移。谢谢。 –