2013-12-18 51 views
0

我需要針對osx 10.6.7+的解決方案。我試圖解決在磁盤上搜索「舊」文件的問題。舊文件我的意思是1年前的文件。 我創建NSPredicate但NSMetadataQuery沒有返回使用NSMetadataQuery查找舊文件

NSPredicate * fileTypePredicate = [NSPredicate predicateWithFormat: @"file_type == \"audio\""]; 
NSPredicate * accessDatePredicate = [NSPredicate predicateWithFormat: @"%K <= %@", @"kMDItemAccessedDates", timeYearBefore]; 
return [NSCompoundPredicate andPredicateWithSubpredicates: @[fileTypePredicate, accessDatePredicate]]; 

相反kMDItemAccessedDates還我用acess_date也沒有成功。

回答

0

對於第一個,我不知道爲什麼你期望「file_type」是一個支持的元數據屬性。

項目的內容類型有兩個屬性。一種是kMDItemContentType,它是項目內容的直接類型(通常由其文件擴展名確定)。另一個是kMDItemContentTypeTree,它是這種類型的數組,以及它的每一個祖先。

要查找音頻文件,您需要查找kMDItemContentTypeTree等於kUTTypeAudio的項目。 (是的,即使您真的想測試數組是否包含類型,平等測試也能正常工作,請在終端中試用:mdfind 'kMDItemContentTypeTree == public.audio'

在您的代碼中,您應該使用雙參數格式字符串就像你有第二個謂詞一樣,但是==作爲運算符:@"%K == %@"對於參數,通過kMDItemContentTypeTree(鍵)和kUTTypeAudio(值 - 在本例中爲內容類型 - 您正在查找)。


至於第二個,我找不到其他exactly one other Stack Overflow questionkMDItemAccessedDates任何地方的任何提及。我認爲這個問題的作者可能已經爲他的Spotlight進口商定製了這個關鍵;您無法期望在庫存OS X系統上找到它。

您可以嘗試使用kMDItemLastUsedDate。 (不要把它寫成字符串文字,在@"…" - 只有kMDItemLastUsedDate沒有任何引號或它前面有@)

+0

謝謝。我需要推遲解決問題。自從上次我嘗試了kMDItemLastUsedDate。作爲預期kMDItemLastUsedDate我已經使用了文件的命令mdls的結果,其中kMDItemLastUsedDate是(2014-02-24 10:24:32)。在這種情況下謂詞是http://pastebin.com/PtCkPHdP,我發現0結果:(任何想法? – toohtik

+0

@toohtik:你確定你有一個日期對象('日期'不是'nil')? –

+0

是我I當然,打印NSPredicate後,我有這樣的:kMDItemLastUsedDate == CAST(414931838.000000,「NSDate」)另外我已經在mdls輸出中使用了日期,如果你有空閒時間,請檢查我的源代碼,http:// cl.ly/1I2C253U230b My osx 10.9。非常感謝! – toohtik