2010-05-01 48 views
4

我有一个非常复杂的问题,我想与你分享,也许有人可以为我回答。 在我开始之前我不得不说我在这方面很新。在不擦除用户数据的情况下迁移/更新核心数据应用程序!

所以,我有一个coredata iphone应用程序(很像食谱应用程序),使用预先填充的SQL数据库。 用户可以添加/编辑自己的数据,但默认数据不能被删除。 useres数据全部保存在同一个sql数据库中。

问: 我有什么才能做到: - 更新一些(不是全部)存储在没有“接触”用户的数据的SQL数据库默认的数据? (模型将保持不变 - 没有新的实体等) (如果用户卸载应用程序,然后重新安装新版本,一切都会好的,但我不想这样做,显然)。

可以有人请帮助编码水平?

+0

似乎是 2750614重复,问刚刚几分钟前。 – 2010-05-01 17:31:41

+0

我觉得我的问题是一个小时更新! LOL 有趣并令人鼓舞的是,我不是唯一一个遇到同样问题的人。 – treasure 2010-05-02 07:09:23

回答

0

由于您输入了默认数据,您必须知道这些记录的ID /密钥。您只需要一个更新脚本来更改默认数据。

+0

我已经设法更新没有问题我的默认数据通过替换旧的SQL与新的更新之一。但是我松了所有用户输入的数据。 我将不胜感激更详细的(如果可能的话)答案/教程来指导我寻求解决方案。 再次感谢您的时间! – treasure 2010-05-02 07:06:11

1

核心数据明确支持模型版本控制,并提供在版本之间迁移数据的工具。这应该包含您需要的信息。 Link to Developer Docs for Migration

+0

感谢您的快速回复。但是,我的问题稍有不同,我会很感激一些教程链接或一些代码开始。 我已经看到你给巴士的链接,我不得不说我有点厚并且不安静地得到它。 预先感谢您提供给我的所有信息...... – treasure 2010-05-02 07:03:47

2

为了支持添加新的实体等以后,你要使用的是这里所描述的版本控制和自动重量轻迁移:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1

基本上你创建数据的新版本模型使用Xcode中的Design->Data Model菜单项,然后进行一些代码更改。这将导致核心数据自动将旧型号迁移到新型号。你所能做的改变是有限的。您可以添加新实体,并将可选属性添加到现有实体,或设置具有默认值的必需属性。

有一件事让我意识到,当您要使用版本控制和迁移时,加载核心数据NSManagedObjectModel的方式发生了变化。如果没有移民,你可能有这样的:

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; 

一旦你开始使用版本管理和迁移,这需要改变的东西是这样的:

NSString *path = [[NSBundle bundleForClass:self.class] pathForResource:@"DataModelName" 
                   ofType:@"momd"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:url] autorelease]; 
相关问题