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

Car*_*ith 2 iphone objective-c ios

我正在尝试使用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];
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

rde*_*mar 6

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

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

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

因此,您必须使用NSFileManager.