如何在iOS7中将UIManagedDocument从iCloud启用迁移到Local Only?

时间:2013-12-04 14:04:05

标签: ios objective-c core-data icloud uimanageddocument

我的目标是 iOS7 ,我使用 iCloud UIManagedDocument

我想将UIManagedDocument从启用的iCloud迁移到仅限本地。迁移文档时,我不希望云中存在任何与其相关的无处不在的内容,我希望它是100%本地的。

相反的情况是,在启用iCloud的UIManagedDocument中转换仅限本地UIManagedDocument非常简单,只需添加两个选项NSPersistentStoreUbiquitousContentNameKeyNSPersistentStoreUbiquitousContentURLKey即可。选项字典以及使用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开发者论坛上发布了这个问题。