首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >搜索文件- Objective-C

搜索文件- Objective-C
EN

Stack Overflow用户
提问于 2011-06-19 03:59:36
回答 3查看 1.7K关注 0票数 1

我正在尝试搜索一个文件。这将返回0个结果。有人知道为什么吗?

代码语言:javascript
运行
复制
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];

更新

代码语言:javascript
运行
复制
NSMetadataQuery *q = [[NSMetadataQuery alloc] init];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"kMDItemFSName == %@", @"test123456.png"];  
    [q setPredicate:predicate];

    [q startQuery];
    NSLog(@"%lu", [q resultCount]);

    [q stopQuery];

谢谢

EN

回答 3

Stack Overflow用户

发布于 2011-06-19 04:02:30

代码语言:javascript
运行
复制
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

票数 2
EN

Stack Overflow用户

发布于 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中找到)

票数 1
EN

Stack Overflow用户

发布于 2014-05-06 14:57:01

在收到NSMetadataQueryDidFinishGatheringNotification.时,在.h文件中声明NSMetaDataQuery q并检查resultCount

代码语言:javascript
运行
复制
 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];

            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6398546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档