Je suis en train de jouer avec l'API Spotlight, à la fois les versions Carbon et Cocoa, et je semble avoir le même problème surgir de temps en temps: La requête ne fonctionne jamais, et ne tire jamais de notifications. Cependant, je tiens à souligner que la plupart du temps fonctionne, donc quelque chose d'étrange se passe.Pourquoi Spotlight n'exécute-t-il pas parfois ma requête?
Je n'écris pas d'application particulière. Ceci est juste un faisceau de test Spotlight, donc la requête n'est pas déclenchée en fonction de l'entrée de l'utilisateur. Au lieu de cela, il est configuré et exécuté en applicationDidFinishLaunching:
à l'intérieur de mon contrôleur. À l'origine, j'ai essayé de le faire dans awakeFromNib
, mais dans ce cas, la requête jamais a couru. (Ma théorie est que le runloop n'a pas encore commencé, mais je ne suis pas sûr.)
Voici le code de applicationDidFinishLaunching:
du carbone:
CFStringRef predicate = CFSTR("kMDItemContentTypeTree == 'public.movie'");
_query = MDQueryCreate(NULL, predicate, NULL, NULL);
_query = (MDQueryRef)CFMakeCollectable(_query);
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(notify:)
name:nil
object:(id)_query];
MDQueryExecute(_query, kMDQueryWantsUpdates);
j'ai écrit ci-dessus de la mémoire, de sorte qu'il peut contenir fautes de frappe qui n'étaient pas dans l'original. Le code d'origine compile et fonctionne très bien, sauf parfois ne fonctionne pas du tout.
Ce qui donne? Peut-être applicationDidFinishLaunching:
n'est pas le bon endroit pour une requête Spotlight.