问题描述
||
我向核心数据模型添加了新版本。我将新属性添加到一个实体(
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;
}
有解决此错误的建议吗?我不想丢失保存的数据
解决方法
问题很可能来自如何加载托管对象模型。默认方法是合并捆绑软件中的模型,但是在这种情况下,实际上您有两个具有相同实体(v1和v2)的模型...在此进行了很好的说明。...迁移问题
,Core Data无法理解这两个模型中的实体ѭ0都是相同的实体,因此应将旧ѭ0的属性转换为新ѭ0。相反,它认为新的“ 0”应被视为一个全新的实体。
这通常是由于尝试对自动迁移无法处理的新版本进行更改而引起的。自动迁移可以处理对属性名称的更改,添加属性或其他更改,这些更改不会影响单个实体之外的任何事物。一旦开始更改关系和/或添加新实体,就必须进行手动迁移。
你可以打电话
+[NSMappingModel inferredMappingModelForSourceModel:destinationModel:error:]
...测试是否可以进行自动迁移。如果返回nil和/或and错误,则不能。