通过使用NSMetadataQuery构建NSPredicate,找到具有聚光灯的不可见文件夹

时间:2009-09-17 21:37:26

标签: objective-c cocoa predicate spotlight

我正在构建一个NSmetaDataQuery来查找不可见的文件夹(比如“.myInvisibleFolder”)。

不幸的是,聚光灯似乎没有找到以“。”开头的文件夹,即使特别包含在谓词中也是如此。

哪些有效且无效

搜索任何不可见的文件名都可以。

搜索内容有效(kMDItemTextContent)。

没有以“。”开头的文件。永远被发现。始终返回0结果。

作为测试,在Finder中搜索不可见的内容。

我做错了什么?还有另一种方法可以找到隐形文件夹吗?

代码:

- (void)searchForMyInvisableFolders{
    self.query = [[[NSMetadataQuery alloc] init] autorelease];

    // To watch results send by the query, add an observer to the NSNotificationCenter
    NSNotificationCenter *nf = [NSNotificationCenter defaultCenter];
    [nf addObserver:self selector:@selector(queryNote:) name:nil object:self.query];

    // Sort results by file name
    [self.query setSortDescriptors:[NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:(id)kMDItemFSName ascending:YES] autorelease]]];

    [self.query setDelegate:self];

    //Create a predicate to search for file name
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@" (kMDItemFSName == '.myInvisibleFolder')"];

    //Create a predicate to search for invisible files
    NSPredicate* invisablePredicate = [NSPredicate predicateWithFormat:@"kMDItemFSInvisible == YES"];

    //Compound predicate
    NSPredicate* compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:predicate, invisiblePredicate, nil]]; 

    // Set it to the query.
    [self.query setPredicate:compoundPredicate];           

    // Start it.
    [self.query startQuery]; 

}   

1 个答案:

答案 0 :(得分:2)

如果我将第一个谓词更改为:

,您的代码对我来说非常适合
[NSPredicate predicateWithFormat:@" (kMDItemFSName == '.DS_Store')"];

您的隐形文件夹是否真的被称为“.myInvisableFolder”(请注意您的拼写错误)?