2

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

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

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

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

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

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

于 2014-06-14T13:05:29.303 回答