如何解决核心数据迁移:“无法合并具有两个不同实体的模型……”
|| 我向核心数据模型添加了新版本。我将新属性添加到一个实体(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错误,则不能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。