【发布时间】:2015-10-10 06:44:17
【问题描述】:
如何使用NSPredicate 和PHFetchOptions 按媒体子类型进行过滤?
我试图排除慢动作(高帧率)和延时视频。当我尝试使用PHFetchOptions 的predicate 字段时,我不断得到奇怪的结果。
我的手机有一堆(120 多个)常规视频和一个慢动作视频。当我从Apple's docs 运行示例时,我得到了正确的结果:1 个慢动作视频。
PHFetchOptions *options = [PHFetchOptions new];
options.predicate = [NSPredicate predicateWithFormat:@"(mediaSubtype & %d) != 0 || (mediaSubtype & %d) != 0", PHAssetMediaSubtypeVideoTimelapse, PHAssetMediaSubtypeVideoHighFrameRate];
但我试图排除慢动作,而不是选择它。但是,如果我否定过滤条件,我会得到零结果:
options.predicate = [NSPredicate predicateWithFormat:@"(mediaSubtype & %d) == 0", PHAssetMediaSubtypeVideoHighFrameRate];
<PHFetchResult: 0x1702a6660> count=0
令人困惑的是,Apple 文档将该字段的名称列为mediaSubtypes(带有“s”),而他们的示例谓词是过滤mediaSubtype(没有“s”)。
尝试过滤 mediaSubtypes 会产生错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't do bit operators on non-numbers'
有没有人能够对这个谓词做出正面或反面?
【问题讨论】:
-
加一。我们也遇到过类似的问题。还没有修复。
标签: ios objective-c cocoa-touch nspredicate photosframework