Ios UIManagedDocument、iCloud和文档类型

Ios UIManagedDocument、iCloud和文档类型,ios,icloud,uimanageddocument,nsmetadataquery,Ios,Icloud,Uimanageddocument,Nsmetadataquery,我有一个应用程序使用UIManagedDocument(即核心数据)文档格式。为了保持生活的趣味性,我正在尝试让它与iCloud一起工作。我已成功地达到以下两种选择之一: 它可以工作,但在iCloud设置中,所有文档都显示为DocumentMetadata.plist,不用说,这非常令人困惑 现有文档在iCloud设置中正确显示,但我无法创建新文档 显然这两个都是不可接受的(尽管第二个显然是最糟糕的) 在场景一中,我没有文档类型或导出的UTI类型,我设置了我的NSMetadataQuery,以查

我有一个应用程序使用UIManagedDocument(即核心数据)文档格式。为了保持生活的趣味性,我正在尝试让它与iCloud一起工作。我已成功地达到以下两种选择之一:

  • 它可以工作,但在iCloud设置中,所有文档都显示为
    DocumentMetadata.plist
    ,不用说,这非常令人困惑
  • 现有文档在iCloud设置中正确显示,但我无法创建新文档
  • 显然这两个都是不可接受的(尽管第二个显然是最糟糕的)

    在场景一中,我没有文档类型或导出的UTI类型,我设置了我的
    NSMetadataQuery
    ,以查找
    DocumentMetadata.plist
    (因为这是一个文件,查询只能查找被认为是文件的内容)

    在场景2中,我确实定义了文档类型和导出的UTI类型。在本例中,
    NSMetadataQuery
    查找我的文档类型的文件扩展名。这种情况下奇怪的是,
    saveToURL:completionHandler:
    方法从不调用完成块:

    [docToOpen saveToURL:docURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){
      NSLog (@"This line never gets executed.";
    }];
    
    (在第一种情况下确实如此。)

    我的猜测——这是一个猜测——是它使用了与
    NSMetadataQuery
    相同的机制来查看文档的文件“guts”何时被创建,但是因为我的文档是
    com.apple.package
    ,所以它看不到内部,认为它还没有完成


    我错过了什么?难道你不应该把托管文档放在iCloud的用户可见部分吗

    不,你不能把UIManagedDocument放在iCloud/Documents目录中。核心数据仅通过iCloud同步事务日志,因此将存储迁移到iCloud的过程完全不同。每个设备都有自己的存储并导入从iCloud下载的其他设备上生成的事务日志。要通过iCloud同步存储,您需要在persistentStoreCoordinator选项中设置ubiquity名称,但是,您不能简单地对现有文件执行此操作,因为为了使其通过iCloud同步,您必须构建一个新副本,以便在iCloud中生成事务日志,以便从头开始创建数据库。然后,您的应用程序需要能够检测到iCloud中的新文件,并启动本地存储的创建,iCloud事务日志可以导入本地存储。@DuncanGroenewald感谢您的评论。我认为我的问题没有我想的那么清楚。我知道你不能把UIManagedDocument复制到iCloud。我上面的选项1起作用了——我可以在模拟器中创建一个文档,并让它与我的iPhone同步。问题是,如屏幕截图所示,这些文件在iCloud设置中显示为DocumentMetadata.plist。@DuncanGroenewald和我找到的唯一解决方案(创建文档类型)打破了其他一切。请注意,同步在第二种情况下仍然有效,但不可能创建新文档。您的应用程序如何工作还不完全清楚。是否要支持可以从任何设备创建的多个用户创建的文档,并确保它们同步到对等设备?另外,在设置persistentStoreCoordinator时,您没有提到设置ubiquity名称,您正在这样做吗?