如何更改Core Data数据库:宝贝步骤?

时间:2013-12-05 16:16:58

标签: ios iphone database core-data database-migration

我有一个LIVE应用程序,我想更改核心数据库。

我正在处理迁移错误并阅读几个问题和答案,但我想问以下问题:

进行此更改的正确顺序步骤是什么?

在我的情况下,我只想将属性添加到单个表中,但是从哪里开始,有几个步骤是什么? 例如,我首先创建一个新版本的xcdatamodel? 添加属性并创建新的.h和.m文件或​​替换现有文件? 我是否需要在核心数据模型上填充标识符(当前模型未填充)?

非常感谢。 问候, 马力

1 个答案:

答案 0 :(得分:2)

这对我有用(改编自Pro Core Data for iOS,Apress)。这假设您只是向表中添加属性。迁移步骤不适用于某些更复杂的模型更改。

准备新模型......

  1. 在项目导航器中选择您的数据模型。
  2. 从“编辑器”菜单中选择“添加模型版本”。
  3. 接受或更改版本名称(我喜欢取出空格),然后单击“完成”。现在,原始模型扩展为显示2个模型。一个是原始的,它有一个绿色的复选标记,因为它仍然是正在使用的那个。
  4. 选择新模型。
  5. 进行更改。
  6. 在“工具”窗格中显示文件检查器视图。向下看“模型版本”部分,并将“当前”设置为您创建的新模型。您将在项目导航器中看到您的新模型现在具有绿色复选标记。
  7. ...迁移

    您需要告诉Xcode自动处理此迁移,只要迁移符合您所称的轻量级迁移,它就可以执行此迁移。

    1. 在Xcode中搜索“addpersistentstorewithtype”。如果您从模板创建应用程序和/或您有一个标准的核心数据堆栈实现,它将在persistentStoreCoordinator方法中的应用程序委托中。
    2. 在storeURL声明和错误...
    3. 之间添加选项NSDictionary 像这样......

      NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataTest.sqlite"];
      
      NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],
                               NSMigratePersistentStoresAutomaticallyOption,
                               [NSNumber numberWithBool:YES],
                               NSInferMappingModelAutomaticallyOption, nil];
      
      NSError *error = nil;
      

      然后在调用addPersistentStoreWithType:configuration:URL:options:error:的options参数中,用这样的选项替换nil ......

      if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                     configuration:nil
                                                               URL:storeURL
                                                           options:options
                                                             error:&error])
      

      最后一步是更新任何受影响的NSManagedObect子类(如果有的话)。如果对模型的更改很小,则可以更轻松地直接编辑文件。或者您可以选择重新生成文件(选择实体,然后从编辑器菜单中选择CreateNSManagedObject子类...)如果您在.h或.m中添加了自己的代码,则需要确保保存这些首先将文件放在桌面上,重新生成文件,然后将代码小心地复制到新生成的文件中。

      构建并运行。