我正在尝试使用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];
感谢您的帮助!
答案 0 :(得分:6)
这是Apple文档“关于文件元数据查询”:
iOS允许在iCloud中进行元数据搜索,以查找相应文件的文件。它仅提供文件元数据查询,NSMetadataQuery和NSMetadataItem的Objective-C接口,并且仅支持搜索iCloud的搜索范围。
与桌面不同,iOS应用程序的沙箱无法使用元数据类进行搜索。为了搜索应用程序的沙箱,您需要使用NSFileManager类以递归方式遍历沙箱文件系统中的文件。找到匹配的文件后,您可以按照所需的方式访问该文件。您还可以使用NSMedatataItem类检索该特定文件的元数据。
因此,您必须使用NSFileManager。