2016-01-27 47 views
1

我正在嘗試創建帶謂詞的NSMetadataQuery。在某個時候,我可能希望收集iCloud可能在另一個點上所有圖像的所有視頻。我不想要其他任何東西,只需搜索視頻或搜索圖像。不是在同一時間。只要我添加此謂詞newQuery它給了我零結果如何過濾NSMetadataQuery

CFStringRef whatToFilter = kUTTypeImage; 
if (self.filterType == kKindVideo) { 
    whatToFilter = kUTTypeVideo; 
} 

NSPredicate *predType = [NSPredicate predicateWithFormat:@"(%K == %@)", NSMetadataItemContentTypeKey, whatToFilter]; 

NSMetadataQuery *newQuery = [[NSMetadataQuery alloc] init]; 
[newQuery setSearchScopes:@[NSMetadataQueryUbiquitousDocumentsScope]]; 
newQuery.predicate = predType; 

我創造了這個代碼。

此查詢的正確語法是什麼?不要告訴我,謂詞也不適用於NSMetadataQuery,因爲排序也不起作用。

回答

4

創建正確NSMetadataQuery謂詞的最好方法是使用Finder的查詢表達式編輯器,像這樣:

Smart Folder query expression editor

然後將其保存爲智能文件夾和獲取信息上生成的文件夾:

Smart Folder info

相關焦點查詢語法,在這種情況下:"(kMDItemUserTags == 'Assets'cd)" ...(忽略_kMDItemGroupId子表達式,如屬性名稱用下劃線開頭的未公開API)

最後,讓NSPredicate弄清楚它是如何想查詢字符串改寫:

let predicate = NSPredicate(fromMetadataQueryString: "(kMDItemUserTags == 'Assets'cd)") 
+0

非常好,謝謝! – SpaceDog

+0

'NSPredicate(來自MetadataQueryString:'是一個很棒的發現。 – pkamb