我无法将照片库中的图像设置为 imageView,并且出现错误 Error Domain=PlugInKit Code=13 “query cancelled”

Posted

技术标签:

【中文标题】我无法将照片库中的图像设置为 imageView,并且出现错误 Error Domain=PlugInKit Code=13 “query cancelled”【英文标题】:I can't set image from photo library to imageView, and got error Error Domain=PlugInKit Code=13 “query cancelled” 【发布时间】:2018-11-04 02:45:19 【问题描述】:

我正在使用 swift4 开发一个 ios 应用程序。 单击个人资料图像视图时,要在图像视图上设置个人资料图像,我有点击手势调用功能。

以下是我的代码。 我按照 swift guide 使用扩展实现了选择器委托。

看到几个关于同一个问题的文档,我想我做了我必须做的。但我无法找出错误,并在 imageview 上设置图像。 请检查我的代码。

import UIKit
import Kingfisher
import Alamofire
import Photos
class MyProfileVC: BaseNavigationVC 

@IBOutlet weak var stateMessageLabel: UILabel!
@IBOutlet weak var profileImageView: UIImageView!
@IBOutlet weak var nicknameLabel: UILabel!
@IBOutlet weak var sexImageView: UIImageView!
@IBOutlet weak var hash1Button: UIButton!
@IBOutlet weak var hash2Button: UIButton!
@IBOutlet weak var hash3Button: UIButton!

let picker = UIImagePickerController()

override func viewDidLoad() 
    super.viewDidLoad()


    picker.delegate = self

    picker.allowsEditing = true
    picker.sourceType = .photoLibrary
    picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!

    let tap = UITapGestureRecognizer(target: self, action: #selector(self.tappedProfileImageView))
    profileImageView.addGestureRecognizer(tap)
    profileImageView.isUserInteractionEnabled = true




@objc func tappedProfileImageView()
    openGallery()


override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(false)
    self.checkPermission()


//I updated this part. this code works correctly
    if let imageUrl = UserInfo.shared().photoUri
        let url = URL(string: imageUrl)

        profileImageView.layer.masksToBounds = false
        profileImageView.clipsToBounds = true
        profileImageView.layer.cornerRadius = profileImageView.frame.size.width / 2
        profileImageView.contentMode = .scaleAspectFill
        profileImageView.kf.setImage(with: url)

    



func openGallery()
    picker.sourceType = .photoLibrary

    present(picker, animated: true, completion: nil)




func checkPermission() 
    let photoAuthorizationStatus = phphotoLibrary.authorizationStatus()
    switch photoAuthorizationStatus 
    case .authorized: print("Access is granted by user")
    case .notDetermined: PHPhotoLibrary.requestAuthorization(
        (newStatus) in
        print("status is \(newStatus)")
        if newStatus == PHAuthorizationStatus.authorized 
            print("success") 
    )
    case .restricted:
        print("User do not have access to photo album.")
    case .denied:
        print("User has denied the permission.")
    

extension MyProfileVC : UIImagePickerControllerDelegate, 

UINavigationControllerDelegate
    @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) 
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage


        self.profileImageView.image = image
        print(info)

    

    dismiss(animated: true, completion: nil)



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

问题的原因是什么。

当我打印信息时,调试区域显示如下。

[__C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerReferenceURL): assets-library://asset/asset.JPG?id=54FE2CEF-59E7-4BCC-AF84-D64C1F32E58B&ext=JPG, __C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerCropRect): NSRect: 0, 0, 2732.0000581881218, 2047.1787102689659, __C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerEditedImage): size 748, 560orientation 0 scale 1.000000, __C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerMediaType): public (_rawValue: UIImagePickerControllerOriginalImage): 尺寸 2732, 2048 方向 0 缩放 1.000000, __C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerPHAsset): 54FE2CEF-59E7-4BCC-AF84-D64C1F32E58B/L0/001 mediaType=1/4, sourceType=1, ( 2732x2048), creationDate=2018-09-17 02:01:23 +0000, location=0, hidden=0, favorite=0, __C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerImageURL): file:///pr ivate/var/mobile/Containers/Data/Application/CD64C336-B5F1-48F6-9D54-504006ADD6E2/tmp/DD94F454-F3BE-4EF9-9F6F-0C90F61BEE19.jpeg]

【问题讨论】:

您的代码看起来不错,并且可以在 Xcode 9.4.1 上运行。该错误看起来像一些Xcode 故障,即使图像检索成功也会发生! 你需要在didFinishPickingMediaWithInfo 中放置一个断点,然后看看你得到了什么。有时,方法签名的微小变化会导致意外行为。 @Kamran 我添加了 didFinishPickingMediaWithInfo 结果。请检查一下 由于图像看起来不错,我认为 profileImageView 可能有些问题。您可以尝试将本地资产中的图像设置为 didFinishPickkngImage 上的 profileImageView 吗?这有助于确定确切的原因。 @Kamran 就像你说的,它是 profileImageView。我添加了另一个 imageView 并使用 didFinishPickingMediaWithInfo 设置图像。这个新的 ImageView 正常显示图像。我试图从 ProfileImageView 上的资产中设置本地图像。它没有显示图像。但是,在调试区域中,没有出现任何错误。其实上面的代码我省略了一些代码,因为我认为它与问题无关。我在 ViewWillAppear 中添加了省略的代码。请看那个。 【参考方案1】:

这是我缺乏编程思维。 虽然我从照片库中选择了一张照片,但在选择照片的 Activity 关闭后,viewWillAppear 会在 ImageView 上设置上一张图片。

【讨论】:

以上是关于我无法将照片库中的图像设置为 imageView,并且出现错误 Error Domain=PlugInKit Code=13 “query cancelled”的主要内容,如果未能解决你的问题,请参考以下文章

仅在 Pixel_Api_26 模拟器中从相机拍摄照片后,无法在 ImageView 中放置图像

使用 Image Picker 后图像未显示在 ImageView 中

我们是不是应该在将图像设置为 UITableView 中的 imageView 之前缩放图像

ImageView.setImageBitmap 为空白

如何在 iPhone 中以高质量调整图像大小

从按钮添加照片库中的图像并在按钮上显示照片