保存核心数据?

时间:2013-08-26 22:35:36

标签: ios objective-c cocoa-touch cocoa core-data

我有一个主要面向数据库的功能应用程序。我的客户端当前正在使用该应用程序,它有许多预先存在的已保存数据(注意:它全部是本地的,不保存在在线数据库中)。问题是,我知道当我更新我的数据模型时,我将不得不卸载,然后重新安装应用程序,否则它会因数据模型中的不一致而崩溃。有没有办法在保存数据时保存数据?

1 个答案:

答案 0 :(得分:3)

  

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

不是真的,除非你不愿意处理这个改变。核心数据包括支持将数据从一个版本的数据模型迁移到更新版本,以便现有数据存储更新为使用新模型而无需卸载或其他极端步骤。在大多数情况下,它甚至是自动的 - 您只需要告诉它来处理变化。具体来说,在添加持久存储时使用options参数:

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


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

如果您的更改仅包含以下一项或多项,则可以使用

  • 添加或删除属性
  • 更改属性的“可选”标记(前提是如果您将其设为非可选,则提供默认值)
  • 重命名实体或属性
  • 添加,删除或重命名实体
  • 添加父实体或子实体,或将属性移动到层次结构中的其他点
  • 将关系从一对多更改为多对

如果要重命名任何内容,则需要设置重命名标识符,以便Core Data知道如何迁移。

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