完成后NSMetadataQuery不发送通知(或未完成)

时间:2012-06-04 01:27:09

标签: iphone objective-c ios

我正在尝试使用NSMetadataQuery访问存储在应用程序文档目录中的某些文件,但NSMetadataQueryDidFinishGatheringNotification不会通知我的应用程序。我发现this question但答案是让NSMetadataQuery成为我已经完成的ivar。

这是我正在使用的代码:

self.query = [[NSMetadataQuery alloc] init];
[self.query setSearchScopes:[NSArray arrayWithObject:documentsDirectoryURL]];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K ENDSWITH '_task'", NSMetadataItemFSNameKey];
[self.query setPredicate:pred];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryDidFinishGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:self.query];

[self.query enableUpdates];

[self.query startQuery];

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

这是Apple文档“关于文件元数据查询”:

iOS允许在iCloud中进行元数据搜索,以查找相应文件的文件。它仅提供文件元数据查询,NSMetadataQuery和NSMetadataItem的Objective-C接口,并且仅支持搜索iCloud的搜索范围。

与桌面不同,iOS应用程序的沙箱无法使用元数据类进行搜索。为了搜索应用程序的沙箱,您需要使用NSFileManager类以递归方式遍历沙箱文件系统中的文件。找到匹配的文件后,您可以按照所需的方式访问该文件。您还可以使用NSMedatataItem类检索该特定文件的元数据。

因此,您必须使用NSFileManager。