Core data UIManagedDocument迁移数据模型

Core data UIManagedDocument迁移数据模型,core-data,migration,icloud,uimanageddocument,Core Data,Migration,Icloud,Uimanageddocument,我正在开发一款iPhone应用程序,它使用UIManagedDocument的子类,并将其文档存储在iCloud上 在我改变了我的核心数据模型/方案(添加了一个新的模型版本——就像我在过去几周中多次做的那样)之前,一切都很好。 我添加了一个新属性,并更改了其中一个现有属性的数据类型 现在,当我运行我的应用程序时,我似乎无法使用UIManagedDocument的-openWithCompletionHandler:加载我的文档。 我可以创建新文档并读/写这些文档。 如果我将数据模型版本更改回1,

我正在开发一款iPhone应用程序,它使用
UIManagedDocument
的子类,并将其文档存储在iCloud上

在我改变了我的核心数据模型/方案(添加了一个新的模型版本——就像我在过去几周中多次做的那样)之前,一切都很好。 我添加了一个新属性,并更改了其中一个现有属性的数据类型

现在,当我运行我的应用程序时,我似乎无法使用
UIManagedDocument
-openWithCompletionHandler:
加载我的文档。 我可以创建新文档并读/写这些文档。 如果我将数据模型版本更改回1,那么我可以读取现有文档,但不能读取新文档

据我所知,我只做到数据模型的轻量级迁移,而
UIManagedDocument
应该能够正确处理这个问题吗


任何建议都将不胜感激

在UIManagedDocument的子类中,您可能希望尝试覆盖managedObjectModel,如下所示:

- (NSManagedObjectModel *)managedObjectModel
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"<ModelNameHere>" ofType:@"momd"];
    NSURL *momURL = [NSURL fileURLWithPath:path];
    NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

    return managedObjectModel;
}
-(NSManagedObjectModel*)managedObjectModel
{
NSString*path=[[NSBundle mainBundle]pathForResource:@“momd”类型的@”;
NSURL*momURL=[NSURL fileURLWithPath:path];
NSManagedObjectModel*managedObjectModel=[[NSManagedObjectModel alloc]initWithContentsOfURL:momURL];
回归模型;
}

以下内容基于我的理解:

注意-我没有在iCloud上试用过,但我已经在非iCloud上试用过,看起来还可以。

UIManagedDocument
自行配置
managedObjectModel
和持久存储协调器

当需要进行迁移时,只需设置
UIManagedDocument
persistentStoreOptions

//Note - In this example, managedDocument is a UIManagedDocument property

self.managedDocument.persistentStoreOptions = [NSDictionary dictionaryWithObjectsAndKeys:
                                        [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                                        [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
参考:


这些代码行应该放在哪里?我也遇到了类似的问题。我把它放在我的
self.database=[[UIManagedDocumentAlloc]initWithFileURL:url]之后但我的迁移似乎没有成功。请检查我的答案中提供的苹果文档链接,文档解释了所有需要的步骤。我在AppDelegate的
-(BOOL)应用程序中使用了上述代码:(UIApplication*)应用程序使用选项完成了启动:(NSDictionary*)启动选项
@user1046037真棒!这对我来说很有效,节省了我很多时间。这绝对是正确的答案。上面的一个很难理解,可能会导致应用程序使用不同的型号。