【问题标题】:NSMetadataQuery does not find documents after moving them to iCloudNSMetadataQuery 在将文档移动到 iCloud 后找不到文档
【发布时间】:2014-02-09 13:35:07
【问题描述】:

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

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

我有两种类型的文档要移动到 iCloud:

  1. 存储为文件包的实际文档
  2. 对于每个文档,我都有一个 .preview 文件作为简单的二进制文件

我的问题是元数据查询返回我的二进制预览文件,但返回我的实际文档,直到我重新启动我的应用程序(或打开来自终端的应用程序的 iCloud 文件夹 - 在这种情况下,我的应用程序会获得另一个包含所有文件的查询结果)。

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

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

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

【问题讨论】:

    标签: cocoa icloud nsfilemanager nsmetadataquery


    【解决方案1】:

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

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

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

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

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

    处理您的 info.plist 文档类型,直到您将文档视为文件,然后它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2011-12-18
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 2013-04-17
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      相关资源
      最近更新 更多