2016-02-05 74 views
5

以下謂詞應該只提取所有屏幕截圖,這很好。PHFetchOptions mediaSubtype謂詞

options.predicate = [NSPredicate predicateWithFormat:@"(mediaSubtype & %d) != 0", PHAssetMediaSubtypePhotoScreenshot]; 

但是如果我只嘗試使用follwing謂詞排除截圖,所有的圖像被排除

options.predicate = [NSPredicate predicateWithFormat:@"(mediaSubtype & %d) = 0", PHAssetMediaSubtypePhotoScreenshot];  

所有進出口試圖做的是從exlude資產screeshots取。

這是已知的錯誤還是我錯過了什麼?

+1

可能重複:[NSPredicate以排除PHFetchResults慢動作視頻](http://stackoverflow.com/questions/31939082/)(相同的一般問題,只是一個不同的'PHAssetMediaSubtype'值)。嘗試修復? – rickster

+0

謝謝你的評論,不幸的是,即使答案被標記爲正確,它實際上並沒有工作。 – stringCode

回答

3

我做了一個快速檢查,這似乎爲我工作:

PHFetchOptions *options = [[PHFetchOptions alloc] init]; 
options.predicate = [NSPredicate predicateWithFormat:@"(mediaSubtype & %d) == 0", PHAssetMediaSubtypePhotoScreenshot]; 

注意如何在謂語雙等於做比較,而不是單一的一個。

+0

謝謝你的回覆。我現在再試一次。這將刪除屏幕截圖,但大多數常規照片也是如此:-)具體的子類型爲PHAssetMediaSubtypeNone。 – stringCode

+2

這不應該發生,但實際上確實如此。我做了一些實驗,看起來像過濾是一個小錯誤。使用謂詞來檢查其他子類型的組合也不起作用,這甚至是Apple推薦的文檔方式。一旦這麼說我認爲目前處理這個問題的最好方法是獲取完整集合並通過枚舉手動過濾數組,儘管如果您需要實時更新獲取,那麼在這種情況下您將看起來很失望。 –

+0

是的,在這一點上,我得出了同樣的結論,我希望我做了一些愚蠢的事情,但它似乎是蘋果的錯誤。將填補雷達。感謝您的幫助和時間 – stringCode

1

了幾個小時後,我找到了一個解決方法使用NOT操作:

NSPredicate(format: "NOT ((mediaSubtype & %d) != 0)", PHAssetMediaSubtype.PhotoScreenshot.rawValue)