2016-02-05 1 views
5

Le prédicat suivant doit extraire toutes les captures d'écran uniquement, ce qui fonctionne parfaitement.PHFetchOptions mediaSubtype predicate

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

Toutefois, si je tente d'exclure des captures d'écran en utilisant uniquement prédicat follwing, toutes les images sont exclues

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

Tout Im essayant de faire est de screeshots à exclure Effectuer chercher actifs.

Est-ce un bug connu ou est-ce que je manque quelque chose?

+1

double possible: [NSPredicate pour exclure des vidéos de slow motion de PHFetchResults] (http://stackoverflow.com/questions/31939082/) (même problème général, juste une valeur différente de 'PHAssetMediaSubtype'). Essayez ce correctif? – rickster

+0

Merci pour votre commentaire, malheureusement, même si la réponse est marquée comme correcte, elle ne fonctionne pas réellement. – stringCode

Répondre

3

J'ai fait une vérification rapide et cela semble fonctionner pour moi:

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

Notez la double égalité dans le prédicat à faire la comparaison au lieu de l'unique.

+0

Merci pour votre réponse. Je l'ai essayé avant un nouveau maintenant. Ceci dépouillera la capture d'écran mais la plupart des photos régulières aussi bien :-) Ceux du sous-type PHAssetMediaSubtypeNone spécifiquement. – stringCode

+2

Cela ne devrait pas arriver, mais le fait effectivement. J'ai fait quelques expériences et j'ai l'impression que le filtrage est un peu bogué. L'utilisation de prédicats pour vérifier une combinaison des autres sous-types n'a pas fonctionné et c'est même la méthode recommandée par Apple dans leur documentation. Une fois cela dit, je pense que la meilleure façon de faire face à ce problème est d'obtenir le jeu complet et de filtrer le tableau manuellement par énumération, bien que si vous avez besoin de mises à jour en direct, vous ne serez plus dans ce cas. –

+0

Ouais à ce stade, je suis arrivé à la même conclusion, j'espérais que je faisais quelque chose de stupide, mais il semble que son bug d'Apple. Remplira le radar. Merci pour votre aide et votre temps – stringCode

1

Après quelques heures, je trouve une solution en utilisant l'opérateur NOT:

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