移动到iCloud后,NSMetadataQuery无法找到文档

时间:2014-01-20 11:38:27

标签: cocoa icloud nsfilemanager nsmetadataquery

在我的Mac应用中,我有一个NSMetadataQuery来观看应用的iCloud目录。当用户决定从应用程序中启用iCloud时,我按以下顺序执行以下操作:

  1. 致电[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]以建立对iCloud容器的访问权限
  2. 启动NSMetadataQuery以查找iCloud容器中的所有文件(模式:"*"
  3. 现在我遍历本地容器中的所有文件,并使用[fileManager setUbiquitous:YES itemAtURL:fileURL destinationURL:targetURL error:&error]
  4. 将它们移动到iCloud

    我有两种类型的文件,我转移到iCloud:

    1. 存储为文件包的实际文档
    2. 对于每个文档,我有一个.preview文件作为简单的二进制文件
    3. 我的问题是元数据查询返回我的二进制预览文件,但我的实际文档,直到我重新启动我的应用程序(或打开一个Finder窗口的来自终端的应用程序的iCloud文件夹 - 在这种情况下,我的应用程序获取所有文件的另一个查询结果)。

      这是一个奇怪的缓存问题吗?这是因为文件是文件包而不是简单的二进制文件吗?

      我不明白为什么这应该是一个问题。如果我重新启动我的应用程序,查询会正确返回所有文件。

      这可能是我在Info.plist中导出自定义文档类型的问题吗?

1 个答案:

答案 0 :(得分:0)

  

这可能是我的自定义文档类型的问题   在Info.plist中导出?

我想是这样的:您所描述的问题很可能是因为您的文档格式是文件包(我假设使用NSFileWrapper编写)。请记住,在写入文件时会设置包位,因此如果您有其他应用程序写入iCloud,这可能会使问题更加混乱,因为它不是关于解释文件包但是以正确的方式写

NSMetadataQuery遗憾地忽略了文件夹,因此除非您在将文件写入iCloud容器的应用程序中正确将文件类型注册为bundle,否则永远不会报告您的文件。

info.plist中有很多类似且可能令人困惑的设置,所以很多事情都可能出错。我在OS X上正确注册文档文件类型时遇到了问题,但在iOS上没有这样做:https://stackoverflow.com/a/14993694/388412

您应该做的第一件事就是转到https://developer.icloud.com/#documents,看看您是否正在查看文件(正确)或文件夹(问题)。

处理info.plist文档类型,直到您将文档视为文件,然后它才能正常工作。