J'ai créé un NSMetadataQuery
pour rechercher tous les fichiers audio disponibles par Spotlight, sur le modèle de la commande suivante, qui renvoie beaucoup de résultats:Puis-je bloquer sur un Spotlight NSMetadataQuery?
mdfind kMDItemContentTypeTree == "public.audio"
Voici le code que je utilise:
NSMetadataQuery * q = [[[NSMetadataQuery alloc] init] autorelease];
[q setPredicate:[NSPredicate predicateWithFormat:@"kMDItemContentTypeTree == 'public.audio'", nil]];
NSLog(@"%@", [[q predicate] predicateFormat]);
if ([q startQuery])
while ([q isGathering]) {
NSLog(@"Polling results: %i", [q resultCount]);
[NSThread sleepForTimeInterval: 0.1];
}
[q stopQuery];
}
Pour une raison quelconque, la requête semble rester indéfiniment dans la phase de collecte et n'obtient jamais un seul résultat. Je voudrais savoir pourquoi c'est le cas, et s'il y aurait une façon plus élégante de bloquer le thread en attendant un résultat, de préférence en évitant l'interrogation.
Mon application n'est pas basée sur Cocoa mais sur NSFoundation, et n'a pas de boucle d'évènement. Je me rends compte que l'approche conventionnelle pour traiter les requêtes Spotlight est de s'abonner à une notification d'événement, mais je ne sais pas comment bloquer en attendant une, et cette approche semble un peu trop lourde pour mes objectifs.
Pour formuler ma question aussi simplement que possible, puis-je bloquer mon fil en attendant que le NSMetadataQuery
termine la phase de collecte initiale? Si c'est le cas, comment?