作为参数传递给MDQuerySetSortComparatorBlock(Spotlight API)的块未被调用

时间:2012-11-09 13:43:33

标签: objective-c macos cocoa spotlight nsmetadataquery

我尝试在MDQuery框架内使用MDQuerySetSortComparatorBlock方法对查询结果列表进行排序。但是,作为参数传递给该方法的块根本不会被调用。下面是我用来发出查询请求的一段代码。 任何帮助表示赞赏。

queryString = [NSString stringWithFormat:@"kMDItemDisplayName == \'*a*\'cd"];
CFStringRef query = (__bridge CFStringRef)(queryString);

queryReference = MDQueryCreate(NULL, query, (__bridge CFArrayRef)([NSArray arrayWithObjects:(id)kMDItemDisplayName, nil]), NULL);

MDQuerySetSortComparatorBlock(queryReference, ^CFComparisonResult(const CFTypeRef *attrs1, const CFTypeRef *attrs2) {

    NSLog(@"Block called");
    return kCFCompareLessThan;

});

MDQuerySetSearchScope(queryReference, (__bridge CFArrayRef)([NSArray arrayWithObjects:(id)kMDQueryScopeComputer, nil]), 0);

MDQueryExecute(queryReference, kMDQueryWantsUpdates);

2 个答案:

答案 0 :(得分:2)

你必须复制块IIRC ...因为MDQuery SetSortComparatorBlock不使用ARC - 它是核心服务的东西,因此你的块被释放...

只是怀疑

答案 1 :(得分:1)

mdquerycreate方法中的第四个参数已用于排序目的。我们可以将一系列属性传递给它来对结果进行排序。如果第四个参数不是NULL,则调用sortcomparator块。