将 Core Data 应用程序迁移到 iCloud

Posted

技术标签:

【中文标题】将 Core Data 应用程序迁移到 iCloud【英文标题】:Migrate Core Data App to iCloud 【发布时间】:2014-04-03 16:10:42 【问题描述】:

这是我的场景:

我的应用使用核心数据并且我正在添加 iCloud 支持,但我在尝试将用户数据迁移到 iCloud 时遇到了问题。

这是我尝试过的:

- 使用 addPersistentStoreWithType 添加我当前的本地数据库

    NSError* error;

    NSURL* oldStoreURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL];
    oldStoreURL =[oldStoreURL URLByAppendingPathComponent:@"Database.sqlite"];

    // add local store (local version)

   NSPersistentStore  *store =  [self.managedObjectContext.persistentStoreCoordinator  addPersistentStoreWithType:NSSQLiteStoreType
                                                                        configuration:nil
                                                                                  URL:oldStoreURL
                                                                              options:options
                                                                                error:&error];

- 使用方法 migratePersistentStore 进行迁移(可能我在这里遗漏了一些东西):

    NSURL* storeURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL];
    storeURL =  [storeURL URLByAppendingPathComponent:@"Database.sqlite"];

[self.managedObjectContext.persistentStoreCoordinator migratePersistentStore:store toURL:storeURL options:iCloudOptions withType:NSSQLiteStoreType error:&error];

我收到 Cocoa 错误 134080,无法添加同一个商店两次。

有人能解释一下这个 migratePersistentStore 方法是如何工作的,以及我需要为每个参数传递什么吗?我在 Apple 文档上几乎没有找到它。

【问题讨论】:

【参考方案1】:

migratePersistentStore 的意义在于您将搬到不同的 商店。你不能迁徙到同一个地方。

由于您要迁移到 iCloud,请为支持 iCloud 的商店使用不同的名称和/或路径。例如,将 iCloud 命名为 Database-iCloud.sqlite。然后从您现有的商店迁移到该商店。

【讨论】:

以上是关于将 Core Data 应用程序迁移到 iCloud的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个 Core Data 模型迁移到一个全新的模型?

iOS - 如何使用 Core Data 将 2 个实体迁移到 1 个?

将 Core Data/sqlite 记录迁移到新版本(从 Library 到 Documents 文件夹)

将 Core Data 数据库从一个应用程序迁移到另一个应用程序

将 Core Data 相关代码迁移到 Swift 2

Core Data轻量级迁移有多少个迁移步骤?