我在Core Data模型中添加了新版本。我将新属性添加到一个实体(Seriese
)
但它引发异常
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't merge models with two different entities named 'Seriese''
我使用以下代码:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationPrivateDocumentsDirectory] stringByAppendingPathComponent: @"CoreDataTutorialPart4.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator;
}
有任何解决此错误的建议吗?我不想丢失保存的数据
答案 0 :(得分:1)
问题很可能来自于您如何加载托管对象模型。默认的方法是合并bundle中的模型,但是在这种情况下你实际上有两个具有相同实体的模型(v1和v2)......这里很好地解释了.... Migration Issues
答案 1 :(得分:1)
核心数据不理解两个模型中的实体Seriese
旨在是同一个实体,并且它应该将旧Seriese
的属性转换为新的Seriese
。相反,它认为新的Seriese
应该被视为一个全新的实体。
这通常是由于尝试对自动迁移无法处理的新版本进行更改而引起的。自动迁移可以处理对属性名称的更改,添加属性或其他不会影响单个实体之外的任何更改。一旦开始更改关系和/或添加新实体,就必须进行手动迁移。
你可以打电话
+[NSMappingModel inferredMappingModelForSourceModel:destinationModel:error:]
...测试是否可以进行自动迁移。如果它返回nil和/或错误,那么你不能。