NSMetadataQuery忽略自定义文件包类型

Stu*_*art 6 nspredicate ios icloud nsmetadataquery

我正在使用UIManagedDocuments来管理iCloud中的文件.设置之后NSMetadataQuery如此:

iCloudQuery = [[NSMetadataQuery alloc] init];
[iCloudQuery setSearchScopes:
    [NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
[iCloudQuery setPredicate:
    [NSPredicate predicateWithFormat:@"%K like %@", NSMetadataItemFSNameKey, @"DocumentMetadata.plist"]];
Run Code Online (Sandbox Code Playgroud)

我遇到了一个奇怪的问题 - 当我的文档没有文件扩展名(例如@"NewDocument2")或公共扩展名时.txt,元数据查询正确地找到了DocumentMetadata.plist文件.但是,当使用我的自定义文件扩展名时,查询永远不会找到任何内容......不是在查询开始时,也不是在我添加新文档时.

在我看来,查询可能是看到我的文档及其自定义文件扩展名,并没有意识到它实际上是一个目录(无论如何都是文件包),因此不会查找内部查找DocumentMetadata.plist文件.但是,我在应用程序中声明了我的自定义UTI info.plist.

也许我已经错误地宣布了我的UTI?我遵循Apple的指导原则(在基于文档的iOS应用程序编程指南统一类型标识符概述中)创建它,但似乎有些不对劲.


编辑:在"导出的UTI"中info.plist,我的类型设置为符合"com.apple.package".


编辑: 我仍然在努力解决这个问题.我现在正在通过不使用文件扩展名来解决它.

使用自定义文件扩展名时,我正在处理iCloud元数据查询结果,DocumentMetadata.plist文件肯定在文件包中,但元数据查询无法看到它.枚举查询结果时,以下内容将打印到日志中:

<iCloud Container URL>/Documents/
<iCloud Container URL>/Documents/New%20Document.spdoc/
<iCloud Container URL>/Documents/New%20Document.spdoc/DocumentMetadata.plist
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>%202)/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>)/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/_EXTERNAL_DATA/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/persistentStore
Run Code Online (Sandbox Code Playgroud)

("CoreDataLogs"目录中还有一堆文件,但为了简洁起见,我没有在这里显示它们).

我只能认为这个问题与错误地创建我的文件包UTI有关.有没有其他人成功使用iCloud自定义文件包?这是一个错误吗?

wby*_*ung 3

这是设计使然。

\n\n

Spotlight 的 API 也以这种方式工作。它不应该下降到包文档中,因为这些文档的内容基本上是私有的。对于 iCloud,这没有多大意义,但我怀疑他们不会改变它。API 根据使用地点以两种不同的方式工作是没有意义的。

\n\n

我想这是一个历史性的事情 \xe2\x80\x94 在 Mac 上你可以实现一个 Spotlight 导入器来处理你的自定义文档类型。在 iOS 上,我认为这还不可能(如果我错了,请纠正我)。所以现在,您只需解决 API 的这个“功能”即可。

\n\n

您可以搜索该文档,然后从那里获取元数据。否则,像您所做的那样链接扩展应该可以工作。

\n