NSPredicate 从 PHFetchResults 中排除慢动作视频
Posted
技术标签:
【中文标题】NSPredicate 从 PHFetchResults 中排除慢动作视频【英文标题】:NSPredicate to exclude slow motion videos from PHFetchResults 【发布时间】:2015-08-11 10:17:31 【问题描述】:NSString *predicateFormat = [NSString stringWithFormat: @"mediaSubtype = %zd", PHAssetMediaSubtypeVideoHighFrameRate];
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateFormat];
PHFetchOptions *fetchOptions = [PHFetchOptions new];
fetchOptions.predicate = predicate;
PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumVideos options:fetchOptions];
这是我获取不包括慢动作视频的视频的代码。但是我遇到了以下错误。即使我这样做也不起作用,
PHFetchOptions *fetchOptions = [PHFetchOptions new];
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"(mediaSubtype & %d) == 0", PHAssetMediaSubtypeVideoHighFrameRate];
请有人帮忙。提前致谢。
Unsupported predicate in fetch options: mediaSubtype == 131072
【问题讨论】:
【参考方案1】:斯威夫特 4
let assetFetchOptions = PHFetchOptions()
assetFetchOptions.predicate = NSPredicate(format: "NOT ((mediaSubtype & %d) != 0)", PHAssetMediaSubtype.videoHighFrameRate.rawValue)
【讨论】:
【参考方案2】:试试这个:
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"(mediaSubtype != %d)", PHAssetMediaSubtypeVideoHighFrameRate];
【讨论】:
【参考方案3】:要排除慢动作视频,唯一对我有用的谓词是:
PHFetchOptions *options = [PHFetchOptions new];
// Disable slow motion videos
options.predicate = [NSPredicate predicateWithFormat:@"NOT ((mediaSubtype & %d) != 0)", PHAssetMediaSubtypeVideoHighFrameRate];
【讨论】:
以上是关于NSPredicate 从 PHFetchResults 中排除慢动作视频的主要内容,如果未能解决你的问题,请参考以下文章
如何强制使用 NSPredicate 从硬盘检索图像的特定顺序
NSPredicate 从 PHFetchResults 中排除慢动作视频
使用 NSPredicate 从 Core Data 访问对象
使用 NSPredicate 从 NSFetchedResultscontroller 更新 NSManagedObject 时出现 CoreData 错误