Answers:
现在,我发现这很简单-一旦您知道要看的地方。
在我的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中做一些技巧:
这似乎很简单,就像我想要的那样简单-但我认为在更改模型时需要在开发过程中小心-否则,每次更改都必须创建一个新版本。
我认为我要做的是保留所有更改的文件,然后准备部署更新后,将删除所有中间文件,并使用最旧和最新的模型进行部署。
更新(15/07/2011):
感谢@ rockstarberlin指出apple上有更新的文档:
更新:2013年8月19日更好的链接:
这是非常有用的。与往常一样,Apple文档非常不完整。我建议进行干净的构建,因为在进行这些更改后第一次运行时遇到错误“无法将模型与两个不同的实体xxx合并”。干净的构建将其修复。
为了跟上Santthosh的回答,我想我应该在这里张贴代码片段。您需要使用创建您的ManagedObjectModel initWithContentsOfURL:
,mergedModelFromBundles:
否则您将得到错误:
无法将模型与两个不同的实体XXX和XXX合并
如果您的模型文件名为“模型”,请按照以下方法创建managedObjectModel:
NSString *path = [[NSBundle mainBundle] pathForResource:@"Model" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
归功于此博客文章。
由于出现其他问题,我偶然发现了该帖子,但错误是“ 用于打开商店的模型配置与用于创建商店的模型配置不兼容。 ”
这是我的问题及其解决方案。在我的模型中,我正在使用configuration。我将某些实体存储在一个文件中,将其他实体存储在第二个文件中。(我有一些默认值,可能需要定期下载这些默认值,将它们合并到整个目录中将是一个难以置信的痛苦)。无论如何,我做了一个新实体。该程序似乎运行良好,但是每当我退出时,都会出现上述错误。
解决方案是查看我的配置,意识到我有一个当前不在任何配置中的实体,然后将其添加到其中。像梦一样奔跑。
这不会解决OP的问题。但是也许有些沮丧的人通过谷歌降落在这里,我会在船上:)