【问题标题】:Can't solve, "Can't merge models with two different entities named"无法解决,“无法合并具有两个不同实体的模型”
【发布时间】:2011-04-28 10:34:02
【问题描述】:
我正在使用 iOS 4.1 中的 Core Data 项目(针对 3.1)。当我添加一个数据模型版本时,我得到了可怕的“无法将模型与两个名为 xxx 的不同实体合并”错误。“清理目标没有帮助。删除构建目录没有帮助。解决问题的唯一方法是删除以前安装的应用程序版本并重新安装,这违背了版本控制和数据迁移的全部目的。
我有另一个项目成功地使用了这个过程,它们共享我为处理核心数据而放在一起的相同代码库。我不知道是什么导致了这个项目。
我的核心数据代码基于 Grouchal 的答案 link text 和 Jeff Lamarche 的 link text。在疑难解答中,我倾注了这些以及网络上其他类似的文章。大多数有这个问题的人似乎在“清理所有目标”方面运气不错。但我正在罢工。
有什么建议吗?
【问题讨论】:
标签:
core-data
ios
data-migration
【解决方案1】:
对于那些在尝试使用核心数据轻量级迁移后遇到这个问题的人:
即使按照说明创建数据模型的新版本后,我仍然遇到此问题。我注意到我的应用程序包中有两个“.mom”文件,一个“.mom”和一个包含“.mom”文件的“.momd”目录。
基于此,我找到this excellent post 解释问题并提供解决方案。
关键是用这个实现替换为你生成的- (NSManagedObjectModel *)managedObjectModel的实现:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"Foo" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel; }
其中“Foo”是您的数据模型的名称。
希望这对某人有用 - 我花了太多时间在墙上敲打我的头。再次感谢苹果! :)
【解决方案2】:
这是我的解决方案
((RootViewController *) [self.tabBarController.viewControllers objectAtIndex:0]).managedObjectContext = self.managedObjectContext;
((AlbumViewController *) [self.tabBarController.viewControllers objectAtIndex:1]).managedObjectContext = self.managedObjectContext;
((CameraViewController *) [self.tabBarController.viewControllers objectAtIndex:2]).managedObjectContext = self.managedObjectContext;
((VideoViewController *) [self.tabBarController.viewControllers objectAtIndex:3]).managedObjectContext = self.managedObjectContext;
【解决方案3】:
我发现我正在使用的第 3 方库正在创建它自己的 CoreData 数据存储,并且正在使用“合并模型”方法或数据模型管理。
我联系了供应商并帮助解决了这种情况。