【问题标题】:NSMetadataQuery doesn't send a notification when finished (or doesn't finish)NSMetadataQuery 完成(或未完成)时不发送通知
【发布时间】:2012-06-04 01:27:08
【问题描述】:

我正在尝试使用 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];

感谢您的帮助!

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

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

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

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

    因此,您必须改用 NSFileManager。

    【讨论】:

      猜你喜欢
      • 2017-08-25
      • 2012-01-08
      • 2014-06-21
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多