[swift] PhotoPicker 검색 오류 : 오류 도메인 = PlugInKit Code = 13

UIImageView에서 사진 라이브러리의 이미지를 표시하려고합니다.

전체 오류는 다음과 같습니다.

2017-06-09 21 : 55 : 59.063307 + 0200 firstapp2.0 [12873 : 1120778] PhotoPicker 검색 오류 : 오류 도메인 = PlugInKit Code = 13 “query cancelled”UserInfo = {NSLocalizedDescription = query cancelled}

내 코드는 다음과 같습니다.

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)
    }
}



답변

명시적인 Objective-C 참조를 만들어야합니다. @objc

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    image = chosenImage
    self.performSegue(withIdentifier: "ShowEditView", sender: self)
    dismiss(animated: true, completion: nil)
}


답변

이 해결책을 찾았습니다. 아래에 언급 된 두 가지 이유 때문에이 오류가 발생했습니다.

  1. 먼저 인증을 위해이 메서드를 호출해야합니다.

인증 코드

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 { / do stuff here */ print("success") }
    })
    case .restricted: / print("User do not have access to photo album.")
    case .denied: / print("User has denied the permission.")
  }
}
  1. 올바른 방법 호출 방법 didFinishPickingMediaWithInfo

잘못된:

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

권리

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

이 솔루션이이 오류를 해결하는 데 도움이되기를 바랍니다.

그것이 당신을 위해 작동한다면 그것이 올바른 것으로 표시하는 것을 잊지 마십시오. 그러면 다른 사람들이 올바른 방법을 찾는 데 도움이 될 것입니다.


답변

찾았어요! “사진”에 ​​대한 권한이 없다는 것을 알리려는 것입니다.#import <Photos/Photos.h> 예를 들어 Objective-C에 이와 같은 권한 하고 요청 .

이것이 시간을 절약하기를 바랍니다. 나는 이것을 디버깅하는데 이틀을 보냈다!

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    switch (status) {
        case PHAuthorizationStatusAuthorized:
            NSLog(@"PHAuthorizationStatusAuthorized");
            break;
        case PHAuthorizationStatusDenied:
            NSLog(@"PHAuthorizationStatusDenied");
            break;
        case PHAuthorizationStatusNotDetermined:
            NSLog(@"PHAuthorizationStatusNotDetermined");
            break;
        case PHAuthorizationStatusRestricted:
            NSLog(@"PHAuthorizationStatusRestricted");
            break;
    }
}];

누군가 Swift에서 동일한 작업을 수행하는 방법을 알려줄 수 있습니다.


답변

많은 성공없이 몇 가지 조합 응답을 시도했습니다.

Swift 4를 사용하여 이미지가 선택되고 선택기에 배치되었는지 확인하기 위해 다음 두 항목이 구현되었는지 확인해야한다는 것을 알았습니다 (확장 프로그램을 검색하는 동안 “[검색] 오류가 발생했습니다.

오류 도메인 = PlugInKit Code = 13 “query cancelled”UserInfo = {NSLocalizedDescription = query cancelled} “

메시지가 여전히 콘솔에 표시되지만 이미지 추가를 방해하지는 않습니다.) 선택기가 해제되는 메시지일까요?

1)에 대한 대리자 UIImagePickerController입니다 (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?필요가 명시 적으로 추가 할 수 있도록 UINavigationControllerDelegate프로토콜 중 하나로 :

class ViewController:UIViewController, UIImagePickerControllerDelegate,
    UINavigationControllerDelegate { .... }. 

2) info.plist에 Privacy - Photo library Usage Description키와 문자열 값이 설정되어 있는지 확인하십시오 .

물론 UIImagePickerController델리게이트 를 생성하고 selfin 과 동일하게 설정 해야합니다 ViewDidLoad().

class ViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    let imagePickerController = UIImagePickerController()
    override func viewDidLoad() {
        super.viewDidLoad()
        imagePickerController.delegate = self
    }
    ...
}


답변

이 문제를 해결하고 아래 함수를 viewdidload 또는 viewWillAppear 또는 viewDidAppear로 호출하여 앱에 대한 권한을 확인했습니다.

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 {
                    /* do stuff here */
                    print("success")
                }
            })
            print("It is not determined until now")
        case .restricted:
            // same same
            print("User do not have access to photo album.")
        case .denied:
            // same same
            print("User has denied the permission.")
        }
    }

그리고 위의 방법을 사용 import Photos하려면 클래스 상단에 추가하는 것을 잊지 마십시오 .


답변

XCODE 10.1 / SWIFT 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)
    }

답변

* Missing DELEGATE * in Swift 3

제 경우에는 모든 설정이 정확했습니다.
1-Delegates (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2-권한이 이미 확인되었습니다.
3-Plist가 이미 완료되었습니다.
4-이 답변에 대한 모든 내용을 읽었습니다.

하지만 구현 pickerview.delegate = self하는 것을 잊었습니다 .viewDidLoad
다른 viewController에서 복사 및 붙여 넣기 때문에 .

누군가에게 도움이되기를 바랍니다. 먼저 COPY / PASTE를 검토하십시오 !!!