Я играю с Spotlight API, как в версии для углерода, так и для какао, и мне кажется, что время от времени возникает одна и та же проблема: запрос никогда не запускается и никогда не запускается любые уведомления. Тем не менее, я хочу подчеркнуть, что большую часть времени он работает , поэтому происходит что-то странное.
Я не пишу никаких приложений. Это всего лишь тестовая система Spotlight, поэтому запрос не запускается на основе пользовательского ввода. Вместо этого он настроен и выполняется в applicationDidFinishLaunching:
внутри моего контроллера. Первоначально я пытался сделать это в awakeFromNib
, но в этом случае запрос никогда не выполнялся. (Моя теория состоит в том, что RunLoop еще не запущен, но я не уверен.)
Вот код из applicationDidFinishLaunching:
для углерода:
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);
Я написал вышесказанное по памяти, поэтому оно может содержать опечатки, которых не было в оригинале. Исходный код компилируется и работает просто отлично, за исключением случая, когда он вообще не работает.
Что дает? Возможно, applicationDidFinishLaunching:
не является подходящим местом для запроса Spotlight.