2011-12-29 134 views
4

我正在使用iPhone应用程序,该应用程序使用UIManagedDocument的子类并将其文档存储在iCloud上。UIManagedDocument迁移数据模型

直到我改变了我的核心数据模型/方案(增加了一个新的模型版本 - 就像我在过去几周里有好几次),这一切工作正常。 我添加了一个新属性并更改了其中一个现有属性的数据类型。

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

从我的理解我只做轻量级迁移到数据模型和UIManagedDocument应该处理这个权利?

任何意见将不胜感激!

回答

2

在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; 
} 
+0

它的工作原理!但有人可以告诉我为什么? – John 2017-02-15 14:40:19

6

下面给出的是根据我的理解:

注意 - 我还没有尝试过的,但iCloud的我已经测试过非icloud,看起来没问题。

UIManagedDocument配置managedObjectModel和本身是一个持久性存储协调员

当迁移需要做的,只是设定UIManagedDocumentpersistentStoreOptions

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

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

参见:

+0

这些代码应放在哪里?我正在经历类似的问题。我把它放在我的'self.database = [[UIManagedDocument alloc] initWithFileURL:url];'但我的迁移看起来并不成功。 – acecapades 2013-05-30 02:37:51

+0

请检查我的答案中提供的Apple文档链接,文档说明了所需的所有步骤。我在AppDelegate的' - (BOOL)应用程序中使用了上面的代码:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions'。 – user1046037 2013-05-30 16:18:46

+0

@ user1046037太棒了!这对我有用,并为我节省了大量的时间。 – dherrin79 2014-04-04 17:46:41