118

フォト ライブラリの画像を UIImageView に表示しようとしています

完全なエラーは次のとおりです。

2017-06-09 21:55:59.063307+0200 firstapp2.0[12873:1120778] PhotoPicker 検出エラー: エラー ドメイン = PlugInKit コード = 13 "クエリがキャンセルされました" UserInfo = {NSLocalizedDescription = クエリがキャンセルされました}

私のコードは以下に含まれています:

import UIKit

class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate{

    @IBOutlet weak var pic: UIImageView!
    @IBOutlet weak var text: UILabel!

    var chosenImage : UIImage!

    override func viewDidLoad() {
        super.viewDidLoad()        
        pic.isUserInteractionEnabled = true;
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [AnyHashable: Any]) {
        var chosenImage = info[UIImagePickerControllerEditedImage]
        self.pic!.image = chosenImage as! UIImage
        picker.dismiss(animated: true, completion: nil)
    }

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

    @IBAction func tap(_ sender: Any) {        
        self.text.text = "Kreason"
        let imagePicker = UIImagePickerController()    
        imagePicker.delegate = self        
        imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
        imagePicker.allowsEditing = false    
        self.present(imagePicker, animated: true, completion: nil)
    }
}
4

35 に答える 35

11

XCODE 10.1 / スイフト 4.2:

  1. 必要なアクセス許可を追加します (その他について言及)

  2. このデリゲート関数を実装します。

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    
        if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            self.imgView.contentMode = .scaleAspectFit
            self.imgView.image = pickedImage
        }
    
        dismiss(animated: true, completion: nil)
    }
    
于 2018-09-22T18:01:50.943 に答える
4

画像設定時に1秒の遅延を設定することで修正しました。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {

        picker.dismiss(animated: false, completion: nil)
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
            self.discussionImage.image = image
        })
    }
}
于 2018-12-28T13:19:33.650 に答える
1

エラーは、ファイルでフォト ライブラリの使用権限を構成していない場合にも発生しますInfo.plist

アプリがユーザーのフォト ライブラリに初めてアクセスしようとしたときに表示される文字列をに追加Privacy - Photo Library Usage Descriptionする必要があります。Info.plist

最終的なInfo.plist調整は次のようになります。 ここに画像の説明を入力

于 2017-10-13T13:40:40.267 に答える
0

I read the all these answers and little bit modified here and not needed to dismiss, this worked for me, Thanks others who have replied here.

    @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

      print("########### media picked")
      picker.dismiss(animated: true, completion: nil)
      let img = (info[UIImagePickerControllerOriginalImage] as? UIImage)!
      //set img -picked image to "profileImage" UIimageView
      //use image here
       self.profileImage.image = img
       }
    }
于 2017-10-25T09:38:53.920 に答える
0

私は同じ問題に遭遇しました。上記の提案はどれも私にとってはうまくいきませんでした。ただし、明示的に picker.dismiss を呼び出して投稿を却下することで解決しました。なぜそのような却下の電話をかけたのかはわかりませんが、うまくいきました。

   @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        print("Image picked")
        picker.dismiss(animated: true, completion: nil)
        dismiss(animated: true) {
            print("dismissed")
             self.delegate?.presentEditor(img: (info[UIImagePickerControllerOriginalImage] as? UIImage)!, id: self.id!)
    }

}
于 2017-09-21T12:42:10.563 に答える