NSMetadataQuery忽略自定义文件包类型

时间:2012-01-26 22:16:31

标签: ios nspredicate icloud nsmetadataquery

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

iCloudQuery = [[NSMetadataQuery alloc] init];
[iCloudQuery setSearchScopes:
    [NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
[iCloudQuery setPredicate:
    [NSPredicate predicateWithFormat:@"%K like %@", NSMetadataItemFSNameKey, @"DocumentMetadata.plist"]];

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

在我看来,查询可能会看到我的文档带有自定义文件扩展名,并没有意识到它实际上是目录(无论如何都是文件包),以及所以不要在里面找到DocumentMetadata.plist文件。但是,我已在应用的DocumentMetadata.plist中声明了我的自定义UTI。

也许我错误地宣布了我的UTI?我遵循Apple的指导原则(在Document-Based App Programming Guide for iOSUniform Type Identifiers Overview中)创建它,但似乎有些不对劲。


编辑:info.plist的“已导出的UTI”下,我的类型设置为符合'com.apple.package'。


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

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

DocumentMetadata.plist

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

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

2 个答案:

答案 0 :(得分:3)

这是设计的。

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

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

您可以搜索文档,然后从中获取元数据。否则,按照您的方式链接扩展名应该可以正常工作。

答案 1 :(得分:1)

升级到iOS 5.1 beta 3或更高版本。我不相信UIManagedDocument + iCloud在iOS 5.0中完全可用。