Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao carregar da biblioteca

Quando tento executar a parte de carregar imagem da biblioteca pelo emulador recebo este erro no console

[discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}

ImagePicker

import UIKit

enum MenuOpcoes {
    case camera
    case biblioteca
}

protocol ImagePickerFotoSelecionada {
    func imagePickerFotoSelecionada(_ foto:UIImage)
}

class ImagePicker: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    // MARK: - Atributos

    var delegate:ImagePickerFotoSelecionada?

    // MARK: - Métodos
     func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let foto = info[UIImagePickerControllerOriginalImage] as? UIImage {
            delegate?.imagePickerFotoSelecionada(foto)
        }

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

    func menuDeOpcoes(completion:@escaping(_ opcao:MenuOpcoes) -> Void) -> UIAlertController {
        let menu = UIAlertController(title: "Atenção", message: "escolha uma das opções abaixo", preferredStyle: .actionSheet)
        let camera = UIAlertAction(title: "tirar foto", style: .default) { (acao) in
            completion(.camera)
        }
        menu.addAction(camera)

        let biblioteca = UIAlertAction(title: "biblioteca", style: .default) { (acao) in
            completion(.biblioteca)
        }
        menu.addAction(biblioteca)

        let cancelar = UIAlertAction(title: "cancelar", style: .cancel, handler: nil)
        menu.addAction(cancelar)

        return menu
    }
}

AlunoViewController

  // MARK: - Métodos

    func setup() {
        imagePicker.delegate = self as? ImagePickerFotoSelecionada
    }

    func arredondaView() {
        self.viewImagemAluno.layer.cornerRadius = self.viewImagemAluno.frame.width / 2
        self.viewImagemAluno.layer.borderWidth = 1
        self.viewImagemAluno.layer.borderColor = UIColor.lightGray.cgColor
    }

    @objc func aumentarScrollView(_ notification:Notification) {
        self.scrollViewPrincipal.contentSize = CGSize(width: self.scrollViewPrincipal.frame.width, height: self.scrollViewPrincipal.frame.height + self.scrollViewPrincipal.frame.height/2)
    }

    func mostrarMultimidia(_ opcao:MenuOpcoes) {
        let multimidia = UIImagePickerController()
        multimidia.delegate = imagePicker

        if opcao == .camera && UIImagePickerController.isSourceTypeAvailable(.camera) {
            multimidia.sourceType = .camera
        }
        else {
            multimidia.sourceType = .photoLibrary
        }
        self.present(multimidia, animated: true, completion: nil)
    }

    // MARK: - Delegate

    func imagePickerFotoSelecionada(_ foto: UIImage) {
        imageAluno.image = foto
    }

    // MARK: - IBActions

    @IBAction func buttonFoto(_ sender: UIButton) {
        let menu = ImagePicker().menuDeOpcoes { (opcao) in
            self.mostrarMultimidia(opcao)
        }
        present(menu, animated: true, completion: nil)
    }
2 respostas

Oi Rodrigo, tudo bem?

Quando você abre a biblioteca pela primeira vez, você setou a permissão para poder visualizar as imagens?

Tenta apagar o app do simulador e buildar novamente, caso não funcione me avisa aqui novamente.

Abs.

solução!

Cometi dois erro na classe AlunoViewController, uma foi que faltou declarar o ImagePickerFotoSelecionada

class AlunoViewController: UIViewController

Correto:

class AlunoViewController: UIViewController, ImagePickerFotoSelecionada 

o que influenciou eu escrever isso:

    func setup() {
        imagePicker.delegate = self as? ImagePickerFotoSelecionada
    }

Correto:

    func setup() {
        imagePicker.delegate = self
    }

agora está tudo certo, obrigado pela atenção :D