2016-02-05 13 views
5

次の述語はすべて正常に動作するすべてのスクリーンショットのみを取得する必要があります。私はfollwing述語を使用してスクリーンショットを除外しようとした場合PHFetchOptions mediaSubtype述語

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

しかし、すべての画像が

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

すべてImがやろうとして除外されているフェッチ資産からscreeshotsをエクスクルードすることです。

これは既知のバグですか?それとも不足していますか?

+1

可能な重複:((http://stackoverflow.com/questions/31939082/)[NSPredicateがPHFetchResultsからのスローモーション動画を除外する]同じ一般的な問題、ちょうど異なる 'PHAssetMediaSubtype'値)。修正してみてください。 – rickster

+0

あなたのコメントをお寄せいただきありがとうございます。悲しいことに、回答が正しいとマークされていても実際には機能しません。 – stringCode

答えて

3

私は簡単なチェックを行い、これが私のために働くようだ:

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

ではなく、単一の1の比較を行うために、述語で二重等に注意してください。

+0

ご返信ありがとうございます。私はもう一度前にそれを試しました。これにより、スクリーンショットがストリップされますが、通常の写真のほとんどは:-)サブタイプPHAssetMediaSubtypeNoneのものです。 – stringCode

+2

それは起こるべきではありませんが、実際にはありません。私はいくつかの実験を行いましたが、フィルタリングが少しバグがあるようです。述語を使用して他のサブタイプの組み合わせをチェックすることも機能しませんでした。これはアップルの推奨する方法でさえドキュメントに書かれています。一度それが現時点でこれに対処する最善の方法は、完全なセットを取得し、列挙を介して手動で配列をフィルタリングすることだと思うが、フェッチのライブアップデートが必要な場合は、その場合は外見になります。 –

+0

この時点で私は同じ結論に達した、私は何か愚かなことをやっていたと思っていたが、それはAppleのバグのようだ。レーダーを埋めるでしょう。あなたの助けと時間をありがとう – stringCode

1

は数時間後、私は、NOT演算子を使用して回避策を見つけました:

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