【问题标题】:How to change Core Data database: baby steps? [closed]如何更改 Core Data 数据库:小步骤? [关闭]
【发布时间】:2013-12-05 16:16:57
【问题描述】:

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

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

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

在我的情况下,我只想将属性添加到单个表中,但我从哪里开始,有哪些步骤? 例如,我首先创建一个新版本的 xcdatamodel? 添加属性并创建新的 .h 和 .m 文件或替换现有的? 是否需要在Core Data Model上填写Identifier(当前模型未填写)?

非常感谢。 问候, 马力

【问题讨论】:

  • 是的,但它无法回答实际变化情况的基本问题,比如我是否需要将类型从“默认 - 核心数据模型”更改为其他类型?我正在阅读并进行反复试验,但幸运的是,如果有人去过那里并愿意分享,这个网站可以加快这个过程......
  • 不,你不需要改变它,这就是为什么指南没有提到这样做。

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


【解决方案1】:

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

准备您的新模型...

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

迁移...

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

  1. 在 Xcode 中搜索“addpersistentstorewithtype”。如果您从模板创建应用程序和/或您有一个标准的核心数据堆栈实现,它将位于您的应用程序委托中的 persistentStoreCoordinator 方法中。
  2. 在 storeURL 和错误声明之间添加选项 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: 的调用中,将 nil 替换为这样的选项...

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

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

构建并运行。

【讨论】:

  • 非常感谢!!在第一条评论之后,我进行了更多的谷歌挖掘,我发现这个“旧”链接(joshjustice.wordpress.com/2011/07/31/…)也有这些步骤——它只另外包括 NSManagedObject 类的生成。再次感谢默里!
  • @HugoPereira 对。我现在已经包含了 NSManagedObject 子类步骤。
猜你喜欢
  • 1970-01-01
  • 2012-02-08
  • 2011-11-08
  • 2014-08-22
  • 2010-11-18
  • 2011-12-07
  • 1970-01-01
  • 2012-12-04
  • 2012-10-14
相关资源
最近更新 更多