2016-02-05 12 views
5

Po predykacie należy pobrać wszystkie zrzuty ekranu, które działają dobrze.PHFetchOptions mediaSubtype predicate

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

Jednak gdy próbuję wyłączyć tylko za pomocą zrzutów ekranu follwing orzecznik, wszystkie obrazy są wyłączone

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

Wszystko Im próbuje zrobić to exlude screenshoty z aktywów sprowadzić.

Czy to znany błąd, czy też coś mi brakuje?

+1

Możliwe duplikat [NSPredicate wykluczyć powolne wideo ruchu z PHFetchResults] (http://stackoverflow.com/questions/31939082/) (ten sam ogólny problem, tylko inna wartość 'PHAssetMediaSubtype'). Spróbuj naprawić? – rickster

+0

Dziękuję za komentarz, niestety, mimo że odpowiedź jest oznaczona jako poprawna, to faktycznie nie działa. – stringCode

Odpowiedz

3

Zrobiłem szybki test i to wydaje się działać dla mnie:

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

Uwaga podwójne równe orzecznika zrobić porównanie zamiast jednego.

+0

Dziękuję za odpowiedź. Próbowałem tego jeszcze raz przedtem. Spowoduje to usunięcie zrzutu ekranu, ale większość zwykłych zdjęć również :-) Te z podtypu PHAssetMediaSubtypeNone specjalnie. – stringCode

+2

To nie powinno się zdarzyć, ale tak właśnie jest. Zrobiłem kilka eksperymentów i wydaje mi się, że filtrowanie jest trochę błędne. Używanie predykatów do sprawdzania kombinacji innych podtypów również nie działało i jest to nawet zalecany przez Apple sposób w ich dokumentacji. Kiedy już to powiedziałem, myślę, że najlepszym sposobem na poradzenie sobie z tym w tej chwili jest uzyskanie pełnego zestawu i filtrowanie tablicy ręcznie poprzez wyliczanie, ale jeśli potrzebujesz aktualizacji na żywo z pobierania, będziesz poza zasięgiem w tym przypadku. –

+0

Tak, w tym momencie doszedłem do tego samego wniosku, miałem nadzieję, że robię coś głupiego, ale wydaje się, że to błąd Apple'a. Wypełni radar. Dziękuję za pomoc i czas. – stringCode

1

Po kilku godzinach znaleźć obejście podstawie nie operatora:

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