我想从用户手机上的所有智能相册中获取图像资产。目前,我正在获取图像和视频,但那不是我想要的。
在我的研究中,我总是找到相同的解决方案,但由于问题已有数年之久,它似乎不再起作用。所以我找不到任何最新的解决方案。
这是我找到的解决方案
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)
let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .any, options: fetchOptions)
let fetchAssetsResult = PHAsset.fetchAssets(in: collection, options: fetchOptions)
执行此行代码时,我收到以下错误消息
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate in fetch options: mediaType == 1'
有什么新的可行解决方案吗?
答案 0 :(得分:3)
在Bappaditya的帮助下,我发现我对错误的资产提取使用了谓词。 mediaType密钥仅用于PHAsset.fetchAsset()
,而不适合我使用的PHAssetCollection.fetchAssetCollection()
。
此代码正在运行
let fetchOptions = PHFetchOptions()
let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .any, options: fetchOptions)
fetchOptions.predicate = NSPredicate(format: "mediaType == %d", PHAssetMediaType.image.rawValue)
let fetchAssetsResult = PHAsset.fetchAssets(in: collection, options: fetchOptions)
答案 1 :(得分:1)
尝试
let albumName = "Your Album Name" or "Your Album Local Identifier"
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
let fetchResult: PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
支持的键是
有关更多详细信息,请参阅PHFetchOptions