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


118

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

11
같은 오류가 발생했습니다. Xcode 9 베타, iOS 11을 사용하고 있습니까?
John

4
이것은 작동했습니다 ... 그리고 iOS 11 베타 4는 갑자기이 오류를 발생했습니다. 그래서 이상한.
user2153553

2
동일한 오류가 발생하고 구현이 obj-c에 있습니다. 이 오류 메시지는 Objective-c의 UIImagePicker 대리자 메서드에서 반환 된 정보 사전의 유형 캐스팅과 관련 될 수 없습니다. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info사전 값은 obj-c에서 id로 캐스팅됩니다. 또한 사용자의 사진 라이브러리에 액세스하기위한 인증 요청 및 처리를 구현했습니다. 여전히 오류 메시지가 표시됩니다. 사용자의 사진 라이브러리 사용을위한 개인 정보 항목을 info.plist 파일에 추가했습니다.
valeCocoa

2
나는 그것이 라이브러리에서 이미지를 얻을 나중에 .. 그것을 사용하는 저를 방지하지 않습니다하지만 현재 버그받을
shokuroff

3
나는 모든 답변을 결합하여 모든 제안을 시도했지만 아무 소용이 없었습니다.
Nicolas Miari

답변:


39

명시적인 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)
}

6
나를 위해 작동합니다. 최근에 Swift 4 및 Xcode 9로 업데이트하여 해결했습니다.
user3144836

3
나를 위해 작동합니다. Swift 4.0으로 마이그레이션 한 후 필요합니다.
mayankk2308

4
작동하지 않습니다. 이 오류는 dismiss.
Kimi Chiu

이상한. 이것은 나를 위해 일했지만 xcode는 경고로 표시하고 다음과 같은 서명을 기대합니다 .` Instance method 'imagePickerController ( : didFinishPickingMediaWithInfo :)' 프로토콜 'UIImagePickerControllerDelegate'Make 'imagePickerController (_)의 선택적 요구 사항'imagePickerController ( : didFinishPickingMediaWithInfo :) ' 와 거의 일치 : didFinishPickingMediaWithInfo :) '비공개로이 경고를 무음`
Dark Castle

@DarkCastle extension [your class name]클래스 외부의 블록에 함수를 작성해야합니다 .
Prometheos II

18

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

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

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

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


Noob PSA : PHPhotoLibrary는 Swift의 사진 모듈에서 가져온 것입니다
Braden Holt

작동하지 않습니다. 전화 한 후에 오류가 발생합니다.picker.dismiss(animated: true, completion: nil)
ForceBru

17

찾았어요! "사진"에 ​​대한 권한이 없다는 것을 알리려는 것입니다.#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에서 동일한 작업을 수행하는 방법을 알려줄 수 있습니다.


1
포함해야합니다 # import를 <사진 / Photos.h>
로버트 Wohnoutka

6
이것은 내 문제를 해결하지 못했습니다.
fi12

1
콘솔 "개인 유효 사용자 설정에서 읽는 중입니다. 확장 프로그램을 검색하는 동안 오류가 발생했습니다. Error Domain = PlugInKit Code = 13"query cancelled "UserInfo = {NSLocalizedDescription = query cancelled}"라는 메시지가 나타납니다. 문제가 해결되지 않았습니다.
Biranchi

15

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

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

4
난 아직도 작업 나던 ... 내 프로젝트의 모든이가
모하메드 리

감사합니다. viewDidLoad ()에서 설정 델리게이트를 놓쳤습니다
Arshad Shaik

11

이 문제를 해결하고 아래 함수를 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하려면 클래스 상단에 추가하는 것을 잊지 마십시오 .


11

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

1
Swift 4x에서 imagePickerController func를 사용하는 진정한 방법
Samet Sazak

10

* Missing DELEGATE * in Swift 3

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

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

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


감사합니다. 오랜 시간 동안 고군분투하고 있습니다. "UINavigationControllerDelegate"를 놓쳤습니다. 드디어 저장했습니다. 감사합니다
Sakthimuthiah

:) 기꺼이 도와
다니엘 Arantes Loverde

8

이것은 가장 직접적인 도움이되는 답변은 아니지만 도움이되기를 바랍니다. 이 특정 오류 메시지가 실제로 실제 문제를 가리 키지 않는다고 99 % 확신합니다. 나는이 똑같은 문제에 대해 머리카락을 꺼내는 데 몇 시간을 보냈다.

1) 선택기를 실행할 때 콘솔에 사진을 인쇄 할 수있는 권한이있었습니다. 2) 쉽게 사진을 탐색하고 선택할 수있었습니다. 3) 선택기를 닫으면 내보기로 돌아갈 때, 내 버튼 이미지 새 사진으로 업데이트되지 않았습니다. 문제에 대한 유일한 힌트는받는 것과 똑같은 오류 메시지였습니다.

ViewDidLoad 대신 ViewWillAppear에서 자리 표시 자 이미지를 하드 코딩 한 것으로 나타났습니다. 선택기가 닫힐 때마다 ViewWillAppear를 호출하고 선택한 이미지를 하드 코딩 된 이미지로 대체했습니다. 나는 그 문제를 고쳤고 충분히 확신했습니다. 이제 모든 것이 잘 작동하고 있습니다. 그리고 선택기에서 돌아올 때마다 여전히 그 오류 메시지가 나타납니다.

문제에 대해 ImagePicker 이외의 다른 곳을 찾는 것이 좋습니다. 그러면 찾을 수있을 것입니다.


7

그렇게하지 않았다면 이것을 시도 하십시오 .

제품> 체계> 체계 편집> 환경 변수 OS_ACTIVITY_MODE: disable

내 문제를 해결합니다.


23
이렇게하면 오류 메시지가 표시되지 않지만 원인은 해결되지 않습니다. 또한 다른 시스템 메시지와 NSLog.
John Montgomery

6
이것은 문제를 '해결'하는 것이 아니라 보이지 않게 만듭니다. 아주 나쁜 습관입니다.
zeeshan dec.

이것은 깔개 tbh 아래에 당신의 먼지를 숨기는 것과 동일합니다
shiv

7

이것은 Swift 4의 문제를 해결합니다.

아래 코드 변경

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

이에:

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


Swift 4.2 update:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){}

내 오류는 다음과 같습니다. 확장 프로그램을 검색하는 동안 오류가 발생했습니다. Error Domain = PlugInKit Code = 13 "query cancelled"UserInfo = {NSLocalizedDescription = query cancelled} 그리고 이것은 OP에 도움이된다면 말할 수는 없지만 내 문제를 해결했습니다. . 감사합니다 :)
agrippa

6

선택기 콜백에서 다른 컨트롤러를 제시하려고 할 때 동일한 메시지가 나타납니다 imagePickerController. 나를 위해 일한 해결책은 선택기 해제 메서드에서 완료 콜백 내부로 코드를 이동하는 것이 었습니다.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        picker.dismiss(animated: true) {
            if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
                let cropController:CropViewController = CropViewController(croppingStyle: .circular, image: pickedImage)
                cropController.delegate = self
                self.present(cropController, animated: true, completion: nil)
            }
        }
    }

멋진 대답, 당신은 내 시간 👍🏼 저장
코더 ACJHP

훌륭하게 일했습니다! 이것이 Swift 4.x에서 선택기 오류를 처리하는 올바른 방법이라고 생각하십시오.
shiv

4

둘 다 서브 클래 싱하고 있는지 확인하십시오 : UIImagePickerControllerDelegate, UINavigationControllerDelegate.

또한 대리자를 설정하는 것을 잊지 마십시오.

let picker = UIImagePickerController()
picker.allowsEditing = true
picker.sourceType = .photoLibrary
picker.delegate = self  //Don't forget this line!
self.present(picker, animated: true, completion: nil)

이 소스에 대한 크레딧 .


picker.delegate = self — 제 경우였습니다! 감사합니다.
Alexey Chekanov

4

이 문제에 대한 해결책을 찾는 데 영원히 걸렸습니다. 문제는 UIImagePickerControllerDelegate의 imagePickerController 함수를 찾을 수 없다는 것입니다. 델리게이트를 올바르게 설정하고 Swift 4로 업그레이드 한 후 작동을 멈춘 경우 문제는 Swift 4 이후에 필요한 @objc를 사용하여 Objective-C에 액세스 할 수 있도록하지 않았기 때문일 수 있습니다.

그건 그래야만 해:

@objc func imagePickerController (...

대신에

func imagePickerController(...

오류 생성Objective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
Nico Neill

바로 이것이 바로 그것을 고치는 방법입니다!
Maria Ortega

@NicoNeill extension블록에 함수를 추가 했 습니까?
Prometheos II

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

3

추가 확인 internal func괄호 후 소문자를 추가 (다음 시작과 _ picker: UIImagePickerController…다음에서 변경 AnyObjectAny] ...
아래 체크 코드 :

internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {

        userPhoto.image = pickedImage

    }

    self.dismiss(animated: true, completion: nil)
}

3

이것은 나를 당황스럽게 만들었지 만 아래 링크의 대답이 나를 위해 일했습니다. 오류가 사라지고 예상대로 이미지가 표시됨

위의 답변처럼, 당신은해야 할 (_ picker...뿐만 아니라 @objc기능 전에.

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
...
}

https://forums.developer.apple.com/thread/82105


2

이것은 내 오류를 해결했습니다.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
    addPhotoBtn.setImage(pickedImage, for: .normal)
    dismiss(animated: true, completion: nil)


}

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

}

2

다음과 같이 단계별로 확인하십시오.

  1. 사진 가져 오기
  2. 앨범에 대한 액세스 권한이 있습니다.

    func authorizeToAlbum(completion:@escaping (Bool)->Void) {
    
    if PHPhotoLibrary.authorizationStatus() != .authorized {
        NSLog("Will request authorization")
        PHPhotoLibrary.requestAuthorization({ (status) in
            if status == .authorized {
                DispatchQueue.main.async(execute: {
                    completion(true)
                })
            } else {
                DispatchQueue.main.async(execute: {
                    completion(false)
                })
            }
        })
    
    } else {
        DispatchQueue.main.async(execute: {
            completion(true)
        })
    }
    }
  3. UIImagePickerController 제시

    self.authorizeToAlbum { (authorized) in
        if authorized == true {
            let picker = UIImagePickerController()
            picker.delegate = self
            picker.allowsEditing = false
            picker.sourceType = .photoLibrary
    
            self.present(picker, animated: true, completion: nil)
        }
    }
  4. 핵심 단계는 위임 방법이 엄격하게 다음과 같은지 확인하십시오.

    // MARK: - UIImagePickerControllerDelegate Methods
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        self.pickedImage = pickedImage
        if let finalImage = handleImage(originalImage: self.pickedImage!, maskImage: self.maskImage!) {
            self.imageView.image = finalImage
        }
    }
    
    dismiss(animated: true, completion: nil)
    }

2

이것이 내가 한 일이며 내 문제를 해결했습니다.

  • @objc 추가
  • 내부 추가
  • imagePicker 앞에 _ 추가
  • AnyObject가 아닌 Any를 사용하고 있는지 확인하십시오.

도움이 되었기를 바랍니다!


흠, internal기본값입니다. 나는 그것이 만드는 차이가 ... 그것을 지정 궁금
니콜라스 미아리

2

제 경우에는 사용자가 이미지에 대한 액세스를 허용했는지 먼저 확인하지 않고 이미지 선택기 컨트롤러를 표시했기 때문에이 오류가 발생했습니다. 내 코드의 다른 곳에서는 사용자가 권한을 부여했기 때문에 사진을 가져 오는 것 뿐이라고 생각합니다. 그러나 그들은 앱에서 그 시점에서 권한을 부여하지 않았을 수 있기 때문에 이미지 선택기 컨트롤러가 문제를 해결하기 직전에 이것을 추가했습니다 (사진 가져 오기도 함).

// request photos permission if permission has not been granted
    if PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.authorized {
        PHPhotoLibrary.requestAuthorization({ (status: PHAuthorizationStatus) in

        })
    }

이 대답이 중복되는 것처럼 보이면 사과하지만 솔루션이 작동하도록 몇 가지 다른 대답을 모아야했습니다. 아마도 이것은 Swift 4를 사용하는 다른 사람에게 도움이 될 것입니다.


2

이 코드 사용

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])

2

이 "Error Domain = PlugInKit Code = 13"오류는 무해한 사과 디버그 메시지 인 것처럼 보이지만 많은 사람들을 혼란스럽게했습니다. UI에서 설정하기 위해 선택한 이미지를 가져 오는 데 문제가 있었고 그 오류가 문제라고 생각했지만 조금 더 미묘했습니다.

내 이미지 선택기 컨트롤러를 표시하는 뷰 컨트롤러와 별도의 파일에 있습니다.

MyViewController.swift

class MyViewController: UIViewController {
    @IBOutlet weak var profileImage: UIImageView!

    ...
}

extension MyViewController: ImagePickerDelegate {
    func didSelect(image: UIImage?) {
        self.profileImage.image = image
    }
}

ImagePicker.swift

open class ImagePicker: NSObject {
    ...
    private func pickerController(_ controller: UIImagePickerController, didSelect image: UIImage?) {
        controller.dismiss(animated: true, completion: {self.delegate?.didSelect(image: image)}
        )
    }
}

대부분의 튜토리얼과 답변은 완료가 nil로 설정되어 있습니다. 그러나 완료를 nil로 설정하고 델리게이트의 didSelect 메서드를 별도로 호출하면 메서드가 호출되지만 이미지가 설정되지 않으므로 해제 완료를 사용해야합니다.

그리고 다시 말하지만,이 답변이 원래 질문과 직접 ​​관련이 없을 수도 있다는 것을 알고 있지만 많은 사람들이이 문제로 여기에오고 있으며 주어진 솔루션이 도움이되지 않는다고 생각합니다. 그 이유는 답변을 제공하는 대부분의 사람들이 메인 뷰 컨트롤러와 동일한 클래스에 이미지 선택기 컨트롤러를 가지고 있으므로 완료를 사용할 필요가 없기 때문입니다.


이것이 바로 제가 필요로하는 것입니다. 감사합니다!
AJ Hernandez

1

오류는 또한 사진 라이브러리 사용 권한을 구성하지 않은 경우에도 발생 합니다.Info.plist 파일 합니다.

당신은 추가해야 Privacy - Photo Library Usage DescriptionInfo.plist로모그래퍼 문자열 앱이 사용자의 사진 라이브러리에 액세스 할 수있는 처음 시도 할 때 나타납니다.

최종 Info.plist조정은 다음과 같습니다. 여기에 이미지 설명 입력


1

동일한 오류가 발생하여 다음과 같이 수정했습니다.

UIImagePickerController에 따라 다른 방식으로 이미지 객체를 가져옵니다. allowsEditing이 true 또는 false입니다.

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

    if isImagePickerAllowEditing {
        sourceImage = info[UIImagePickerControllerEditedImage] as? UIImage
    } else {
        sourceImage = info[UIImagePickerControllerOriginalImage] as? UIImage
    }

    ....

}

그리고 물론 위의 설명과 같이 먼저 사진 라이브러리에 대한 액세스 권한을 요청하십시오.


1

내 끝에서 UINavigationControllerDelegate대리인이 없습니다.

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate


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

}

0

나는이 모든 답변을 읽고 여기에서 약간 수정했으며 무시할 필요가 없습니다. 이것은 나를 위해 일했습니다. 여기에 답변 한 다른 사람들에게 감사드립니다.

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

0

IMage PickerView의 해결책을 찾았습니다 .....

@IBOutlet weak var myImageView: UIImageView!

var imagePicker = UIImagePickerController()


  @IBAction func selectImage(_ sender: Any) {

        let myPickerController = UIImagePickerController()
        myPickerController.delegate = self;
        myPickerController.sourceType = UIImagePickerControllerSourceType.photoLibrary

        self.present(myPickerController, animated: true, completion: nil)

    }

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

        var selectedImageFromPicker: UIImage?

        if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage
        {
            selectedImageFromPicker = editedImage as! UIImage


        }else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage{

            selectedImageFromPicker = originalImage as! UIImage


        }

        dismiss(animated: true, completion: nil)

        if var selectedImage = selectedImageFromPicker
        {
            myImageView.image = selectedImage
        }

    }

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

0

imageView를 클릭하여 사진 라이브러리에서 이미지를로드하고 동일한 이미지보기에서 미리보기를 표시합니다. 신속한 4

 let imagePicker = UIImagePickerController()
        @IBOutlet weak var userImage: UIImageView! 

     override func viewDidLoad() {
                super.viewDidLoad()
                 imagePicker.delegate = self
                let tap = UITapGestureRecognizer(target: self, action: #selector(SignUpViewController.click))
                userImage.addGestureRecognizer(tap)
                userImage.isUserInteractionEnabled = true
            }

            @objc func click()
            {
                imagePicker.allowsEditing = false
                imagePicker.sourceType = .photoLibrary
                present(imagePicker, animated: true, completion: nil)
            }


            @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
                if  let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage{
                userImage.contentMode = .scaleAspectFit
                userImage.image = chosenImage
                }
                dismiss(animated: true, completion: nil)
            }

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

0

Swift 4.2Xcode 10.0 에서 이와 동일한 문제가 발생했습니다 . 이미지 선택기가 올바르게 작동했지만 Xcode가 콘솔에이 오류를 표시했습니다. 이를 제거하려면 :

  • Xcode 메뉴에서 제품> 구성표> 구성표 편집
  • '실행'탭을 선택한 다음 '인수'를 선택하십시오.
  • '환경 변수'섹션에서 이름이 OS_ACTIVITY_MODE 이고 값이 비활성화 된 변수를 추가합니다.

음 ... 정말 ... 나를 위해 내가이 오류를 참조하기 위해이 값을 사용하기 위해 필요한 있도록 ... 그것은이 오류를 표시하지만 didFinishPickingMediaWithInfo 방법은 호출되지 않습니다
모하메드 리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.