【问题标题】:UIManagedDocument migrate data modelUIManagedDocument 迁移数据模型
【发布时间】:2012-01-29 19:54:28
【问题描述】:

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

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

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

据我了解,我只对数据模型进行轻量级迁移,UIManagedDocument 应该可以处理这个问题吗?

任何建议将不胜感激!

【问题讨论】:

    标签: core-data migration icloud uimanageddocument


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      以下是基于我的理解:

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

      UIManagedDocument 自己配置 managedObjectModel 和 Persistent Store Coordinator

      当需要迁移时,只需设置UIManagedDocumentpersistentStoreOptions

      //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 = [[UIManagedDocument alloc] initWithFileURL:url]; 之后,但是我的迁移似乎没有成功。
      • 请检查我的回答中提供的 Apple 文档链接,该文档解释了所需的所有步骤。我在 AppDelegate 的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中使用了上面的代码。
      • @user1046037 太棒了!这对我有用,为我节省了大量时间。
      • 这个绝对是正确答案。上面的一个很难理解,可能会导致应用使用不同的模型。
      猜你喜欢
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多