Swift3 从图库获取全部照片异常:仅获取3张(共9张)求助
解决Swift3获取系统相册照片不全的问题
嘿,我一眼就看出问题所在啦——你用错了获取照片的API!
为什么只拿到3张照片?
你代码里用的PHAsset.fetchKeyAssets(in:options:)方法,它的设计目的不是获取相册里的全部照片,而是返回系统算法筛选出的「关键/精选照片」,数量本来就会远少于相册实际总数,所以你9张照片只拿到3张是完全正常的~
正确的解决方案
要获取相册里的所有照片,你需要改用PHAsset.fetchAssets(in:options:)方法,还可以加上排序规则让照片按时间排列,更符合使用习惯。下面是修改后的完整代码片段:
let options = PHFetchOptions() // 按拍摄时间倒序排列,让最新的照片排在前面 options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] // 获取用户相册列表 let userAlbums = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: options) guard let targetAlbum = userAlbums.firstObject else { print("未找到目标相册") return } // 获取该相册下的所有照片(重点:用fetchAssets替代fetchKeyAssets) let allPhotos = PHAsset.fetchAssets(in: targetAlbum, options: options) let imageManager = PHCachingImageManager() // 遍历所有照片 allPhotos.enumerateObjects { (asset, index, stop) in // 根据需求设置目标尺寸和内容模式 imageManager.requestImage(for: asset, targetSize: CGSize(width: 300, height: 300), contentMode: .aspectFill, options: nil) { (image, info) in guard let fetchedImage = image else { return } // 这里处理获取到的图片,比如添加到数组或展示 print("成功获取第\(index + 1)张照片") } }
额外注意事项
- 确保你已经在
Info.plist中添加了相册访问权限的描述(NSPhotoLibraryUsageDescription),没有权限的话会无法获取完整的照片列表 - 如果你的需求是获取系统的「所有照片」相册,而不是自定义相册,可以直接用
PHAsset.fetchAssets(with: .image, options: options),省去获取PHAssetCollection的步骤
内容的提问来源于stack exchange,提问作者catcatcat
相关产品推荐
相关产品推荐

