4

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

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

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

据我了解,我只对数据模型进行轻量级迁移,并且UIManagedDocument应该处理它吗?

任何建议将不胜感激!

4

2 回答 2

7

以下是基于我的理解:

注意 - 我还没有为 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];

参考:

于 2012-11-20T15:41:00.130 回答
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;
}
于 2011-12-30T07:41:12.483 回答