首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置Photokit Fetch的NSPredicate格式

设置Photokit Fetch的NSPredicate格式
EN

Stack Overflow用户
提问于 2014-10-01 04:40:32
回答 2查看 4.3K关注 0票数 3

我很难理解如何为photokit查询制定文件管理器,特别是当你只想检索特定的mediaTypes时如何制定一个NSPredicate。在我的例子中,我尝试检索所有相册(即PHCollectionAssets),尽管我只想要这些相册中的照片。我不知道如何制定我的NSPredicate来做这件事。我在文档中找到了下面的代码来过滤特定的mediaSubtypes,但我只想按PHAssetMediaTypeImage mediaType进行过滤。有没有人能解释一下下面的NSPredicate代码的语法,以及我如何按照@"mediaType == %@, PHAssetMediaTypeImage"的方式设置一个谓词,而不会像现在这样导致我的PHFetchRequest崩溃?

代码语言:javascript
复制
PHFetchOptions *fetchOptions = [PHFetchOptions new];
fetchOptions.predicate = 
    [NSPredicate predicateWithFormat:
        @"(mediaSubtype & %d) != 0 || (mediaSubtype & %d) != 0", 
        PHAssetMediaSubtypePhotoPanorama, PHAssetMediaSubtypeVideoHighFrameRate];
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithOptions:fetchOptions];
EN

回答 2

Stack Overflow用户

发布于 2014-10-06 04:55:52

似乎有一个细微的区别:PHAssetMediaSubtype是位掩码值,而PHAssetMediaType只是一个整数。这并不会真正改变它们的性质,但可能谓词解释器只是拒绝将逐位AND运算符&应用于PHAssetMediaType。对于这种情况,您需要使用常规相等运算符==

因此,如果因为您只想要给定集合中的资产而没有fetchAssetsInAssetCollection:withMediaType:方法,所以fetchAssetsWithMediaType对您来说不够好,那么您可以这样做:

代码语言:javascript
复制
PHFetchOptions *fetchOptions = [PHFetchOptions new];
fetchOptions.predicate = 
    [NSPredicate predicateWithFormat:@"mediaType == %d", PHAssetMediaTypeImage];
PHFetchResult *assetsFetchResult = 
    [PHAsset fetchAssetsInAssetCollection:anAssetCollection options:fetchOptions];
票数 5
EN

Stack Overflow用户

发布于 2014-10-01 06:12:12

您给出的示例来自docs。它通过它们的mediaSubtype过滤PHAssets,它的类型是PHAssetMediaSubtype,一个枚举。您可以使用逻辑AND运算符来测试资产的mediaSubtype是否属于一个或多个可能的子类型。该示例测试从fetch返回的PHAssets是全景照片(PHAssetMediaSubtypePhotoPanorama)还是高帧率视频(PHAssetMediaSubtypeVideoHighFrameRate)。

如果您只想获取图像,则需要这样做。获取图像。不要获取所有资产并按mediaSubtype进行过滤,因为这是不必要的。

尝试以下方法:

代码语言:javascript
复制
 + (PHFetchResult *)fetchAssetsWithMediaType:(PHAssetMediaType)mediaType options:(PHFetchOptions *)options;

如下所示:

代码语言:javascript
复制
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil];

这将返回所有图像。或者,传递PHFetchOptions以进一步过滤此fetch返回的图像。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26129704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档