2012-11-09 1 views
3

J'ai essayé d'utiliser la méthode MDQuerySetSortComparatorBlock dans l'infrastructure MDQuery pour trier la liste des résultats de la requête. Cependant, le bloc passé en paramètre à la méthode n'est pas appelé du tout. Ci-dessous un morceau de code que j'utilise pour faire une demande de requête. Toute aide est appréciée.Le bloc passé en paramètre à MDQuerySetSortComparatorBlock (API Spotlight) n'est pas appelé

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); 

Répondre

1

Le quatrième paramètre dans la méthode mdquerycreate a été fournie à des fins de tri. Nous pouvons lui passer un tableau d'attributs pour trier les résultats. Si le quatrième paramètre n'est pas NULL, le bloc sortcomparator est appelé.

2

tu dois copier le IIRC bloc ... parce que MDQuerySetSortComparatorBlock ne marche pas utiliser ARC - il est des choses CoreServices et que votre bloc est libéré ...

juste un soupçon

+0

Merci Djan vous m'avez donné quelque chose à travailler. – Shashank

+0

Hey Daij Djan, j'ai essayé de créer un iVar avec l'attribut copy, la méthode Block_copy utilisée. Rien de tout cela ne semble fonctionner. – Shashank

+0

tirer, désolé .. :(laissez-moi dormir aeh .. y penser –