2009-06-23 71 views
1

我正在玩Spotlight API,Carbon和Cocoa版本,並且我似乎每隔一段時間都會遇到同樣的問題:查詢從不運行,並且從不觸發任何通知。不過,我想強調的是,大多數時候確實運行了,所以有些奇怪的事情正在發生。爲什麼Spotlight有時不運行我的查詢?

我不寫任何特定的應用程序。這只是一個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查詢。

回答

1

我在applicationDidFinishLaunching中啓動Spotlight查詢並沒有問題,所以我不認爲這是您的問題。

我有幾件事情要嘗試。而不是在addObserver中傳入nil作爲名稱:selector:name:object嘗試爲名稱傳遞NSMetadataQueryDidFinishGatheringNotification,併爲名稱傳遞NSMetadataQueryDidUpdateNotification。第一次將在查詢完成第一次運行時生成結果。第二個將提供更新。 (但只有當事情發生變化時。)

相關問題