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

Swift 4中ImagePickerViewController调用代理方法时遇PlugInKit Code=13错误

解决ImagePickerViewController "query cancelled" (Code=13) 错误

嘿,这个错误我之前踩过坑,大概率是几个常见的小问题导致的,咱们来一步步排查解决:

1. 别忘了在代理方法中关闭ImagePicker控制器

你的代理方法代码里没看到dismiss操作!这是最容易忽略的点——当用户选择完图片后,必须手动关闭UIImagePickerViewController,否则系统可能会判定操作未完成,抛出"query cancelled"错误。修改你的代码:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        if let imageData = UIImagePNGRepresentation(image) {
            UserDefaults.standard.set(imageData, forKey: "avatarImage")
        }
    } else {
        // 处理图片获取失败的情况
        print("无法获取选中的图片")
    }
    // 关键:必须关闭选择器
    picker.dismiss(animated: true, completion: nil)
}

另外,也要确保你实现了取消代理方法,同样要关闭控制器:

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    picker.dismiss(animated: true, completion: nil)
}

2. 检查相册/相机权限配置

iOS 10+ 要求访问相册或相机必须在Info.plist中添加权限描述,否则系统会直接拒绝访问,触发类似的错误。

  • 访问相册:添加NSPhotoLibraryUsageDescription键,值填用户能理解的权限说明(比如"需要访问相册来选择头像")
  • 访问相机:如果你的ImagePicker支持相机,还要添加NSCameraUsageDescription键和对应的描述

添加方法:右键项目中的Info.plist → Add Row → 选择对应的权限键,填写描述文本。

3. 替换过时的字符串键(Swift 4+ 最佳实践)

Swift 4开始,UIImagePickerController的info字典推荐使用UIImagePickerController.InfoKey枚举而不是字符串键,这样更安全,避免拼写错误。修改你的图片获取代码:

if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
    // 后续逻辑不变
}

4. 检查ImagePicker的初始化配置

确保你正确设置了sourceType和delegate:

let imagePicker = UIImagePickerController()
imagePicker.sourceType = .photoLibrary // 或者.camera,根据你的需求
imagePicker.delegate = self
present(imagePicker, animated: true, completion: nil)

如果设置了.camera,还要检查设备是否有相机(比如模拟器默认没有相机,会直接触发错误),可以提前判断:

if UIImagePickerController.isSourceTypeAvailable(.camera) {
    imagePicker.sourceType = .camera
} else {
    imagePicker.sourceType = .photoLibrary
    print("当前设备不支持相机")
}

按照这几个步骤排查,应该就能解决这个"query cancelled"的错误了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:32:39