我正在尝试向我的核心数据模型添加一个新实体(比如B,带有两个“双”属性),并与现有实体(比如A)创建一个可选的多对多关系。我创建了新的模型修订版,其中包括新实体B,现有实体A和多对多关系A - >> B.这个新模型是默认模型。我创建了一个从v2到v3的映射模型(v1 - > v2迁移工作正常,只是实体A的数据类型更改),但没有为A与B的关系指定值表达式,也没有为B的属性指定值表达式。
当我运行应用程序时,尝试实例化托管对象模型managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
时收到以下错误。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'.
问题可能是我没有在映射模型中为A与B的关系指定值表达式,但我认为它不是必需的,因为B是可选的,并且它在模型的v2中不存在。如果我必须为关系指定值表达式,那么对于不存在(因为它在模型的v2中不存在)可选关系,我该怎么做?
非常感谢任何帮助。
PS - 还有一个问题 - 即使是必要的映射模型,还是智能自动迁移才能处理新实体和关系?
答案 0 :(得分:2)
我刚刚在自己的项目中解决了这个问题。当您拥有多个版本的数据模型时,[NSManagedObjectModel mergedModelFromBundles:nil]效果不佳。它试图包括所有这些,但不应该。
尝试使用类似的东西:
- (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;
}
深入故事检查: http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html