当前位置:  开发笔记 > 前端 > 正文

我需要做些什么才能让Core Data自动迁移模型?

如何解决《我需要做些什么才能让CoreData自动迁移模型?》经验,为你挑选了3个好方法。

我已经阅读了关于Core Data模型的自动/轻量级迁移的文档 - 但是在实现它的过程中遇到了问题.

据我所知,应用程序应该注意到它所拥有的模型和设备上存在的模型已经不一样了.如果您只添加了属性或关系以及类似的简单更改,则应自动升级模型.

任何指针 - 我需要在xCode中设置一些东西吗?



1> Grouchal..:

我现在发现这很简单 - 一旦你知道在哪里看.

在我的AppDelegate中,我设置了NSPersistentStoreCoordinator - 你需要为此添加一些选项来告诉它处理自动迁移:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:

[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,

[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

NSError *error;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
    // Handle error
    NSLog(@"Problem with PersistentStoreCoordinator: %@",error);
}

然后你需要在xCode中做一个小技巧:

    选择您的xcdatamodel文件

    选择顶部的设计菜单 - 然后选择数据模型 - 然后选择添加模型版本

    然后,您的xcdatamodel文件将被移动到一个与xcdatamodel文件同名但扩展名为xcdatamodeld的新目录中 - 此目录中将有第二个文件,名称中包含2.选择新文件,然后选择Design-> Data Model-> Set Current Version(在Xcode 4中执行此操作)

    如果您已经进行了导致项目不兼容的更改 - 请从原始xcdatamodel文件中删除这些更改.如果您还没有进行更改 - 那么只需编辑2.xcdatamodel文件(您刚刚制作当前版本的文件).

    现在,当您将此版本安装到具有旧模型的设备上时,它会自动将该模型升级到新模型.

这看起来很棒,也很简单 - 但我觉得在更改模型时需要在开发过程中小心 - 否则你将不得不为每次更改创建一个新版本.

我想我会做的是保留所有已更改的文件,然后一旦我准备部署我的更新,我将删除所有中间文件,并使用最旧和最新的模型进行部署.


更新(2011年7月15日):

感谢@ rockstarberlin指出苹果的更新文档:

Xcode 4:设置托管对象模型的当前版本

更新:2013年8月19日更好的链接:

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmModelFormat.html



2> Scott Means..:

这非常有帮助.苹果文档 - 像往常一样 - 非常不完整.我建议做一个干净的构建,因为当我在进行这些更改后第一次运行时遇到错误"无法将模型与两个不同的实体xxx合并".干净的构建修复了它.



3> Santthosh..:

Grouchal的答案是完美的...但是如果你仍然拥有"无法将模型与两个不同的实体xxx合并",即使在清理了几次构建之后......你可能会遇到如何加载managedObjectModel的问题.看看这个......这帮我解决了..

核心数据迁移问题

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有