我的目标是 iOS7 ,我使用 iCloud 与 UIManagedDocument 。
我想将UIManagedDocument
从启用的iCloud迁移到仅限本地。迁移文档时,我不希望云中存在任何与其相关的无处不在的内容,我希望它是100%本地的。
相反的情况是,在启用iCloud的UIManagedDocument
中转换仅限本地UIManagedDocument
非常简单,只需添加两个选项NSPersistentStoreUbiquitousContentNameKey
和NSPersistentStoreUbiquitousContentURLKey
即可。选项字典以及使用migratePersistentStore:toURL:options:withType:error:
迁移持久性存储。
我认为要从iCloud迁移回Local Only,只需将persistentStore传递给nil作为选项字典即可,但这不起作用:
NSPersistentStoreCoordinator *psc = self.managedDocument.managedObjectContext.persistentStoreCoordinator;
NSPersistentStore *ps = [psc.persistentStores objectAtIndex:0];
if(ps){
NSError *error;
[psc migratePersistentStore: ps
toURL: dbLocalOnlyURL
options: nil
withType: ps.type
error: &error];
if(error){
NSLog(@"Error migrating the DB to Local Only: %@", error);
}else{
NSLog(@"DB Migrated successfully to Local Only");
}
}
我得到一个Cocoa错误256:操作无法完成。 NSUnderlyingException =无法打开数据库文件,NSSQLiteErrorDomain = 14。
当我尝试执行操作时,使用本地存储仍然是1.但我也尝试使用本地存储:0。
我认为可能是'因为我试图使用documentState = UIDocumentStateNormal来迁移持久性存储,所以我修改了这样的代码:
[self.managedDocument closeWithCompletionHandler: ^(BOOL success){
if(success){
NSLog(@"Document closed succesfully. Performing the migration.");
NSPersistentStoreCoordinator *psc = self.managedDocument.managedObjectContext.persistentStoreCoordinator;
NSPersistentStore *ps = [psc.persistentStores objectAtIndex:0];
if(ps){
NSError *error;
[psc migratePersistentStore: ps
toURL: dbLocalOnlyURL
options: nil
withType: ps.type
error: &error];
if(error){
NSLog(@"Error migrating the DB to Local Only: %@", error);
}else{
NSLog(@"DB Migrated successfully to Local Only");
}
}
}else{
NSLog(@"Error closing the document.");
}
}];
但我仍然得到错误。任何提示?
在迁移文档之前关闭文档总是比较好吗?
注1 :如果我将持久存储迁移到另一个网址,迁移可以正常运行,但我想要的是完全相同的UIManagedDocument从iCloud迁移到仅本地。
注意2 :我也在Apple开发者论坛上发布了这个问题。