3

我正在尝试使用 NSMetadataQuery 访问存储在应用程序文档目录中的一些文件,但 NSMetadataQueryDidFinishGatheringNotification 没有通知我的应用程序。我发现了这个问题,但答案是让 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];

谢谢你的帮助!

4

1 回答 1

6

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

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

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

因此,您必须改用 NSFileManager。

于 2012-06-04T04:24:40.397 回答