You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:57:40