使用“hidden = YES”谓词崩溃获取 PHAsset

Posted

技术标签:

【中文标题】使用“hidden = YES”谓词崩溃获取 PHAsset【英文标题】:Fetch PHAsset with 'hidden = YES' predicate crash 【发布时间】:2015-06-09 15:07:14 【问题描述】:

如documentation 中所列,PHAsset 支持hidden (or isHidden) 获取密钥。但是当我尝试获取隐藏资产时,我的应用程序崩溃并显示以下日志:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“获取选项中不支持的谓词:隐藏 == 1”

这里是示例代码:

PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.wantsIncrementalChangeDetails = YES;
options.includeAllBurstAssets = YES;
options.includeHiddenAssets = YES;
options.predicate = [NSPredicate predicateWithFormat:@"hidden = YES"];

PHFetchResult *fetchResult = [PHAsset fetchAssetsWithOptions:options];

return fetchResult;

【问题讨论】:

【参考方案1】:

我在第一个答案中没有仔细阅读问题,也许这会有所帮助

如果您只想要隐藏的专辑,为什么不使用? 子类型:PHAssetCollectionSubtypeSmartAlbumAllHidden

PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.wantsIncrementalChangeDetails = YES;
options.includeAllBurstAssets = YES;
options.includeHiddenAssets = YES;
options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %d",PHAssetMediaTypeImage];

PHFetchResult *albums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumAllHidden options:nil];

【讨论】:

获取隐藏资产的方法有多种,包括您的一种。问题不是关于“如何”,而是“为什么我的有效代码会崩溃”。 好的明白了,无论如何我都会留下答案。

以上是关于使用“hidden = YES”谓词崩溃获取 PHAsset的主要内容,如果未能解决你的问题,请参考以下文章

点语法的知识点

创建谓词来测试关系的数量

UIView: alpha:0, hidden:YES, removeViewFromSuperview 和 frame.origin.y = -100000 之间的性能/内存差异;

NSManagedObjectContext -save:使用 NSPredicate 时崩溃

UIView 属性 hidden = YES vs alpha = 0.0f

在 CloudKit 中使用比较谓词进行查询