我正在尝试搜索一个文件。这将返回0个结果。有人知道为什么吗?
NSMetadataQuery *q = [[NSMetadataQuery alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"kMDItemFSName == %@", @"test123456.png"];
[q setPredicate:predicate];
[q startQuery];
while ([q isGathering]) {
NSLog(@"%lu", [q resultCount]);
}
[q stopQuery];
更新
NSMetadataQuery *q = [[NSMetadataQuery alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"kMDItemFSName == %@", @"test123456.png"];
[q setPredicate:predicate];
[q startQuery];
NSLog(@"%lu", [q resultCount]);
[q stopQuery];
谢谢
发布于 2011-06-19 04:02:30
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"kMDItemSFName == %@", @"test123456.png"];
如果你是从你的代码中复制的,我认为kMDItemSFName
应该是kMDItemFSName
。;-)
您使用的是基础工具模板,还是具有运行循环的完整应用程序?
基本上,我认为MDMetadataQuery
被设计为异步运行,在那里您开始查询,并在查询完成时收到结果通知。
来自Introduction to Spotlight Query Programming Guide
对于需要创建查询并与结果交互的应用程序,有两个API可用。Spotlight元数据框架提供了一个低级查询API
MDQuery
,它允许应用程序根据元数据值搜索文件。MDQuery
是完全可配置的,允许您运行同步和异步查询,并提供对结果批处理频率的细粒度控制。
Cocoa框架的NSMetadataQuery
类为MDQuery
提供了一个高级Objective-C接口。此类允许您使用NSPredicate
类的子集构造查询,并异步执行查询。NSMetadataQuery
支持Cocoa绑定,允许您在不编写任何大量胶水代码的情况下显示结果。同样,NSMetadataQuery
允许应用程序指定将结果分组到多个子类别中。NSMetadataQuery
不支持同步查询,并在收集数据时提供最少的更新通知。
参见Technical Note TN2192 Querying Metadata With Spotlight。
发布于 2011-06-19 18:43:49
由于NSMetadataQuery是异步工作的,因此需要到达run循环才能获得结果。您可以设置一个委托或注册一个通知,该通知在找到结果或有更新时立即调用。
我在Mac文档中没有提到这一点,但在iOS 5文档中他们明确指出了这一点。也许这对OS X来说不是真的?但你应该试一试。
“查询会在结果成批返回时发送通知。当初始结果收集阶段完成时,查询会向应用程序发送通知。”(在http://developer.apple.com/library/mac/#documentation/Carbon/Conceptual/SpotlightQuery/Concepts/QueryingMetadata.html#//apple_ref/doc/uid/TP40001848-CJBEJBHH中找到)
发布于 2014-05-06 14:57:01
在收到NSMetadataQueryDidFinishGatheringNotification.时,在.h文件中声明NSMetaDataQuery q并检查resultCount
someFunction
{
[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(initalGatherComplete:)
name:NSMetadataQueryDidFinishGatheringNotification
object:metadataSearch];
q = [[NSMetadataQuery alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"kMDItemFSName == %@", @"test123456.png"];
[q setPredicate:predicate];
[q startQuery];
}
- (void)initalGatherComplete:sender;
{
[q stopQuery];
NSLog(@"%lu",[q resultCount]);
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NSMetadataQueryDidFinishGatheringNotification
object:metadataSearch];
}
https://stackoverflow.com/questions/6398546
复制相似问题