Erro de descoberta do PhotoPicker: Domínio de erro = Código PlugInKit = 13


118

Estou tentando exibir uma imagem da biblioteca de fotos em um UIImageView

O erro completo é:

2017-06-09 21: 55: 59.063307 + 0200 firstapp2.0 [12873: 1120778] Erro de descoberta do PhotoPicker: Erro de domínio = PlugInKit Code = 13 "consulta cancelada" UserInfo = {NSLocalizedDescription = consulta cancelada}

Meu código está incluído abaixo:

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
Eu tenho o mesmo erro. você está usando o Xcode 9 beta, iOS 11?
João

4
Isso costumava funcionar ... e então o iOS 11 Beta 4 me deu esse erro de repente. Tão estranho.
user2153553

2
Estou recebendo o mesmo erro e minha implementação está em obj-c. Essa mensagem de erro não pode ser relacionada à conversão de tipo do dicionário de informações retornado no método delegado UIImagePicker em objetivo-c: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)infoos valores do dicionário são convertidos como id em obj-c. Também implementei a solicitação de autorização e tratamento para acessar a biblioteca de fotos do usuário: continuo recebendo a mensagem de erro. Eu adicionei no arquivo info.plist a entrada de privacidade para uso da biblioteca de fotos do usuário.
valeCocoa

2
Recebo o bug atual, no entanto, ele não me impede de obter a imagem da biblioteca e usá-la mais tarde.
shokuroff,

3
Tentei todas as sugestões em todas as respostas combinadas, sem sucesso.
Nicolas Miari

Respostas:


39

Você precisa fazer referência explícita ao 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
Funciona para mim. Eu tinha atualizado recentemente para o Swift 4 e o Xcode 9 e isso resolveu o problema.
user3144836

3
Funciona para mim. Requerido após a migração para o Swift 4.0.
mayankk2308 de

4
Não funciona. Este erro ocorreu depois que liguei dismiss.
Kimi Chiu

Estranho. Isso funcionou para mim, no entanto, o xcode marca isso como um aviso e espera uma assinatura de: `Método de instância 'imagePickerController ( : didFinishPickingMediaWithInfo :)' quase corresponde ao requisito opcional 'imagePickerController ( : didFinishPickingMediaWithInfoInfo :)' do protocolo 'UIImagePickerControllerDelegate' ImagePickerControllerDelegate ' : didFinishPickingMediaWithInfo :) 'privado para silenciar este aviso `
Dark Castle

@DarkCastle você precisa escrever a função em um extension [your class name]bloco, fora da classe.
Prometheos II

18

Eu encontrei essa solução. Recebemos esse erro devido a esses dois motivos mencionados abaixo.

  1. Primeiro, precisamos chamar esse método para autorização

Código de autorização

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. Forma correta de chamada de método de didFinishPickingMediaWithInfo

Errado:

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

Certo

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

Espero que esta solução ajude você a resolver esse erro.

Se funcionar para você não esqueça de marcar como correto, então isso ajudará os outros a encontrarem o caminho correto.


PSA Noob: PHPhotoLibrary é do módulo Fotos do Swift
Braden Holt

Não funciona. O erro acontece depois que eu ligopicker.dismiss(animated: true, completion: nil)
ForceBru 01 de

17

Eu encontrei! Ele está tentando dizer que você não tem autorização para "fotos". Você precisa incluir o #import <Photos/Photos.h>e solicitar autorização por exemplo, como este em Objective-C.

Espero que isso te economize algum tempo. Passei dois dias inteiros depurando isso!

[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;
    }
}];

Tenho certeza de que alguém pode lhe dizer como fazer o mesmo no Swift.


1
certifique-se de incluir #import <Photos / Photos.h>
Robert Wohnoutka

6
Isso não resolveu meu problema.
fi12

1
Estou recebendo a mensagem abaixo no console "Lendo as configurações do usuário efetivo privado. Erros encontrados ao descobrir extensões: Domínio de erro = Código PlugInKit = 13" consulta cancelada "UserInfo = {NSLocalizedDescription = consulta cancelada}". Não resolveu o problema.
Biranchi

15

Tentei algumas das respostas de combinação sem muito sucesso.

Usando o Swift 4, descobri que precisava ter certeza de que os dois itens a seguir foram implementados para garantir que a imagem foi selecionada e colocada no seletor (observe que os erros "[descoberta] encontrados durante a descoberta de extensões:

Domínio de erro = Código PlugInKit = 13 "consulta cancelada" UserInfo = {NSLocalizedDescription = consulta cancelada} "

ainda é exibida no console, mas não o impede de adicionar uma imagem). Talvez esta seja uma mensagem que resulta na dispensa do selecionador?

1) O delegado para o UIImagePickerControlleré (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?então necessário adicionar explicitamente o UINavigationControllerDelegatecomo um dos protocolos:

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

2) Certifique-se de que o info.plist tenha a Privacy - Photo library Usage Descriptionchave e o valor String definidos.

Obviamente, você precisa criar um UIImagePickerControllere definir seu delegado igual a selfem ViewDidLoad():

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

4
eu tenho tudo isso no meu projeto .. ainda não funciona
Mohamed Lee

Obrigado, eu perdi a configuração do delegado em viewDidLoad ()
Arshad Shaik

11

Corrigi esse problema, chame a função abaixo em viewdidload ou viewWillAppear ou viewDidAppear para verificar a permissão para seu aplicativo.

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

E para usar o método acima, não se esqueça de adicionar import Photosno topo da classe.


11

XCODE 10.1 / SWIFT 4.2:

  1. Adicione as permissões necessárias (outros mencionados)

  2. Implemente esta função delegada:

    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
Verdadeira maneira de usar a função imagePickerController no Swift 4x
Samet Sazak

10

* Faltando DELEGATE * no Swift 3

No meu caso, todas as configurações estavam corretas:
1 - Delegados (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - Permissões já verificadas;
3 - Plist já feito;
4 - Tudo que li neste Respostas, eu fiz;

Mas esqueci de implementar pickerview.delegate = selfno viewDidLoad porque eu COPIO e COLO do meu outro viewController e esqueci disso!

Espero que ajude alguém, reveja sua CÓPIA / COLAR primeiro !!!


Obrigado, estou lutando por muitas horas e perdi "UINavigationControllerDelegate", você salvou finalmente, obrigado
Sakthimuthiah

Fico feliz em ajudar :)
Daniel Arantes Loverde 10/10/1919

8

Esta pode não ser a resposta mais diretamente útil - mas espero que ajude! Tenho 99% de certeza de que essa mensagem de erro específica não está realmente apontando para o problema real. Passei horas puxando meu cabelo exatamente por causa desse mesmo problema.

1) Eu tinha autorização para impressão de fotos no console quando eu iniciava meu seletor, 2) Eu poderia navegar e escolher uma foto com bastante facilidade e 3) quando eu voltaria à minha visão ao dispensar o seletor, minha imagem de botão não foi atualizado com a nova foto ... e a única dica que tive para o problema foi exatamente a mesma mensagem de erro que você está recebendo.

Acontece que eu estava codificando uma imagem de espaço reservado em ViewWillAppear em vez de ViewDidLoad. Cada vez que o selecionador estava dispensando, ele estava chamando ViewWillAppear e substituindo minha imagem escolhida pela minha imagem codificada. Corrigi esse problema e com certeza - tudo está funcionando bem agora ... e ainda vejo aquela mensagem de erro sempre que volto do seletor.

Eu recomendo procurar em outro lugar que não o ImagePicker para o seu problema e provavelmente você o encontrará.


7

Se você ainda não fez isso, tente isso .

Produto> Esquema> Editar Esquema> Variáveis ​​de Ambiente OS_ACTIVITY_MODE: disable

Isso resolve meu problema.


23
Isso suprime as mensagens de erro, mas não resolve sua causa. Ele também suprime outras mensagens do sistema e qualquer coisa de NSLog.
John Montgomery

6
Isso não 'resolve' o problema, apenas o torna invisível. Prática muito ruim.
Zeeshan

Isso é o equivalente a esconder sua sujeira debaixo do tapete tbh
shiv

7

Isso corrige o problema no Swift 4:

Altere o código abaixo

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

para isso:

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


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

Meu erro parecia mais ou menos assim: erros encontrados ao descobrir extensões: Erro Domain = PlugInKit Code = 13 "query cancelled" UserInfo = {NSLocalizedDescription = query cancelled} E isso resolveu meu problema, embora eu não possa falar se isso ajuda o OP . Obrigado :)
agrippa

6

Recebi a mesma mensagem quando estava tentando apresentar outro controlador do retorno de chamada do selecionador imagePickerController. A solução que funcionou para mim foi mover meu código dentro do retorno de chamada de conclusão do método de dispensar do selecionador

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

Ótima resposta, você economizou meu tempo 👍🏼
Coder ACJHP

Funcionou maravilhosamente! Acho que esta é a maneira correta de lidar com os erros do seletor no Swift 4.x.
shiv

4

Certifique-se de que você está extendendo ambos: UIImagePickerControllerDelegate, UINavigationControllerDelegate.

Além disso, lembre-se de definir o delegado:

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

Créditos para esta fonte .


picker.delegate = self - foi o meu caso! Obrigado.
Alexey Chekanov,

4

Encontrar a solução para esse problema me levou uma eternidade. Parece que o problema é que a função imagePickerController do UIImagePickerControllerDelegate não pode ser encontrada. Se você configurou o delegado corretamente e ele parou de funcionar após a atualização para o Swift 4, o problema é provavelmente que você não o tornou acessível ao Objective-C usando @objc, que é necessário desde o Swift 4.

Tem que ser:

@objc func imagePickerController (...

ao invés de

func imagePickerController(...

Isso cria um erroObjective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
Nico Neill

Exatamente, essa é a maneira de consertar!
Maria Ortega

@NicoNeill você adicionou a função em um extensionbloco?
Prometheos II

4

Corrigido definindo um atraso de 1 segundo ao definir a imagem.

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

Certifique-se de adicionar internal funcno início e, em seguida, adicione as minúsculas após o parêntese ( _ picker: UIImagePickerController…e, em seguida, mude de AnyObjectpara Any] ...
Verifique o código abaixo:

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

Isso me deixou perplexo, mas a resposta no link abaixo funcionou para mim. O erro desapareceu e a imagem é exibida conforme o esperado

Como uma das respostas acima, você deve ter, (_ picker...mas também @objcantes da função.

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

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


2

Isso resolveu meu erro:

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

Verifique pelos passos a seguir:

  1. Importar fotos
  2. Tem acesso ao álbum:

    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. Presente 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. A etapa principal, certifique-se de que o método delegado seja como seguir estritamente

    // 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

Isso é o que eu fiz e resolveu meu problema.

  • adicione @objc
  • adicionar interno
  • add _ before imagePicker
  • certifique-se de usar Any e não AnyObject

Espero que isto ajude!


Hmm, internalé o padrão; Eu me pergunto que diferença faz especificá-lo ...
Nicolas Miari

2

No meu caso, estava recebendo este erro porque estava apresentando um controlador de seletor de imagens sem primeiro verificar se o usuário tinha permitido o acesso às imagens. Em outra parte do meu código, o usuário concedeu permissão, então acho que tudo que precisei fazer foi importar fotos. No entanto, como eles 'podem' não ter concedido permissão naquele ponto do aplicativo, adicionar isso pouco antes de eu apresentar o controlador do seletor de imagens resolveu o problema para mim (importar fotos também).

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

        })
    }

Se essa resposta parece redundante, minhas desculpas, mas eu tive que juntar algumas respostas diferentes para fazer minha solução funcionar. Talvez isso ajude alguém a usar o Swift 4.


2

use este código

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

2

Este erro "Error Domain = PlugInKit Code = 13" confundiu muitas pessoas, embora pareça ser uma mensagem de depuração da apple inofensiva. Eu estava tendo problemas para obter a imagem que escolhi para definir na minha IU e pensei que esse erro era o problema, mas era algo um pouco mais sutil.

Tenho meu controlador de seletor de imagem em um arquivo separado do controlador de exibição que o está apresentando.

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

A maioria dos tutoriais e respostas tem a conclusão definida como zero. No entanto, se você definir a conclusão como nil e chamar o método didSelect do delegado separadamente, o método será chamado, mas a imagem não será definida, portanto, certifique-se de usar a conclusão de dispensar.

E, novamente, sei que essa resposta pode não estar diretamente relacionada à pergunta original, mas tenho a sensação de que muitas pessoas estão vindo aqui para resolver esse problema e as soluções fornecidas não estão ajudando. O motivo é que a maioria das pessoas que respondem tem seu controlador de seletor de imagem na mesma classe de seu controlador de visualização principal e, portanto, não precisam usar um preenchimento.


Isso é exatamente o que eu precisava. Obrigado!
AJ Hernandez

1

O erro também acontece quando você não configurou as permissões de uso da Fototeca em vocêInfo.plist arquivo.

Você precisa adicionar Privacy - Photo Library Usage Descriptiono Info.plistcom uma String que aparecerá quando seu aplicativo tentar acessar a Biblioteca de fotos do usuário pela primeira vez.

Os Info.plistajustes finais devem ser mais ou menos assim: insira a descrição da imagem aqui


1

Eu tenho o mesmo erro e corrigi-lo desta forma:

obter o objeto de imagem de maneira diferente depende de UIImagePickerController allowEditing é verdadeiro ou falso

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

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

    ....

}

E, claro, peça permissão para acessar a biblioteca de fotos primeiro, conforme os comentários acima.


1

No meu final, UINavigationControllerDelegatefalta delegado.

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate


0

Eu me deparei com o mesmo problema. Nenhuma das sugestões acima mencionadas funcionou para mim. No entanto, resolvi isso chamando explicitamente o selecionador. Ignorar e descartar o post Não sei por que dispenso ligações como essa, mas funcionou para mim.

   @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

Eu li todas essas respostas e modifiquei um pouco aqui e não precisei dispensar, isso funcionou para mim, obrigado outros que responderam aqui.

    @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

encontrei a solução do 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

clique em imageView para carregar a imagem da biblioteca de fotos e mostrar a visualização na mesma imagem. no swift 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

Tive esse mesmo problema no Swift 4.2 e Xcode 10.0 . Embora o seletor de imagem estivesse funcionando corretamente, o Xcode mostrou este erro no console. Para se livrar disso:

  • No menu Xcode Produto> Esquema> Editar Esquema
  • Selecione a guia 'Executar' e, em seguida, 'Argumentos'
  • Na seção 'Variáveis ​​de ambiente' adicione uma variável com Nome OS_ACTIVITY_MODE e valor desabilitado

Bem ... não realmente ... para mim ele mostra este erro, mas o método didFinishPickingMediaWithInfo não é chamado ... então eu precisei habilitar esse valor para ver este erro
Mohamed Lee
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.