将 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的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 如何使用 Core Data 将 2 个实体迁移到 1 个?
将 Core Data/sqlite 记录迁移到新版本(从 Library 到 Documents 文件夹)