2016-02-05 8 views
5

Il seguente predicato dovrebbe recuperare solo tutti gli screenshot, che funzionano perfettamente.PHFetchOptions mediaSubtype predicate

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

Tuttavia se provo ad escludere le immagini solo utilizzando predicato follwing, tutte le immagini sono esclusi

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

Tutto Im cercando di fare è di exlude screeshots da risorsa recupero.

Questo bug noto o mi manca qualcosa?

+1

Eventuali duplicati: [NSPredicate di escludere i video al rallentatore da PHFetchResults] (http://stackoverflow.com/questions/31939082/) (stesso problema generale, solo un diverso valore 'PHAssetMediaSubtype'). Prova quella correzione? – rickster

+0

Grazie per il tuo commento, purtroppo anche se la risposta è contrassegnata come corretta, in realtà non funziona. – stringCode

risposta

3

Ho fatto un rapido controllo e questo sembra funzionare per me:

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

notare il doppio uguali in predicato per fare il confronto, invece di quello singolo.

+0

Grazie per la risposta. L'ho provato prima di nuovo ora. Questo eliminerà lo screenshot ma anche la maggior parte delle foto normali :-) Quelli del sottotipo PHAssetMediaSubtypeNon specificamente. – stringCode

+2

Ciò non dovrebbe accadere, ma in realtà lo fa. Ho fatto alcuni esperimenti e sembra che il filtro sia un po 'buggato. Anche l'uso di predicati per il controllo di una combinazione di altri sottotipi non ha funzionato e questo è persino il modo consigliato da Apple nella loro documentazione. Detto questo, penso che il modo migliore per affrontarlo al momento sia quello di ottenere il set completo e filtrare manualmente l'array attraverso l'enumerazione, sebbene in questo caso sia necessario cercare aggiornamenti in tempo reale del recupero. –

+0

Sì, a questo punto sono giunto alla stessa conclusione, speravo di fare qualcosa di stupido, ma sembra il bug di Apple. Riempirà il radar. Grazie per il tuo aiuto e il tuo tempo – stringCode

1

Dopo qualche ora ho trovato una soluzione con operatore NOT:

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