PHFetchOptions mediaSubtype谓词

str*_*ode 5 photo ios photosframework

下面的谓词应该只获取所有的截图,这工作得很好.

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

但是,如果我尝试仅使用follwing谓词排除屏幕截图,则会排除所有图像

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

我试图做的就是从资产获取中排除screeshots.

这是已知的错误还是我错过了什么?

Pab*_*rez 5

我做了一个快速检查,这似乎对我有用:

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

请注意谓词中的double equal而不是单个谓词。

  • 那不应该发生,但实际上会发生。我做了一些实验,似乎过滤有点问题。使用谓词检查其他子类型的组合也不起作用,这甚至是Apple在其文档中推荐的方式。话虽如此,我认为目前处理此问题的最佳方法是获取完整数据集并通过枚举手动过滤数组,但是如果您需要实时获取更新,则在这种情况下您将不知所措。 (2认同)

小智 5

几个小时后,我发现了使用NOT运算符的解决方法:

NSPredicate(format: "NOT ((mediaSubtype & %d) != 0)", PHAssetMediaSubtype.PhotoScreenshot.rawValue)
Run Code Online (Sandbox Code Playgroud)