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

iOS Swift:相机拍照后无法将图片保存至UIImageView的问题

问题分析与解决方案

你遇到的核心问题是:相机拍照完成后,info字典里并不包含UIImagePickerControllerImageURL这个键,所以你的第一个判断分支直接跳过了,导致图片没有设置到UIImageView中。而相册选择的图片是本地已存在的文件,所以这个URL键是存在的,能正常执行后续逻辑。

为什么会这样?

UIImagePickerControllerImageURL(现在更推荐用枚举UIImagePickerController.InfoKey.imageURL)仅适用于从相册/图库中选择已存在的本地图片,它返回的是图片文件在本地的存储路径。而相机拍摄的图片是临时生成的,系统不会直接生成一个本地URL给你,而是直接通过UIImagePickerControllerOriginalImage(对应枚举.originalImage)返回拍摄得到的UIImage对象。

修复后的代码示例

你需要同时兼容相机和相册两种场景,优先通过.originalImage获取图片(这个键在两种场景下都有效),如果有需要再单独处理URL的情况:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    // 统一获取图片:相机和相册都支持.originalImage键
    if let pickedImage = info[.originalImage] as? UIImage {
        // 替换成你的UIImageView实例
        yourImageView.image = pickedImage
    } 
    // 如果需要处理图片URL(比如要保存到本地、上传服务器等),再单独处理相册场景的URL
    else if let imageURL = info[.imageURL] as? URL {
        do {
            let imageData = try Data(contentsOf: imageURL)
            if let pickedImage = UIImage(data: imageData) {
                yourImageView.image = pickedImage
            }
        } catch {
            print("读取图片失败:\(error.localizedDescription)")
        }
    }
    
    // 别忘了关闭图片选择器
    picker.dismiss(animated: true)
}

额外提示

  1. 建议使用UIImagePickerController.InfoKey枚举代替字符串key,避免拼写错误,同时更符合Swift的类型安全特性。
  2. 相机拍照时,如果你需要将图片保存到相册,还可以调用UIImageWriteToSavedPhotosAlbum方法,但要记得请求相册写入权限。

内容的提问来源于stack exchange,提问作者PvDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:00:37