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)
}
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
os 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.Respostas:
Você precisa fazer referência explícita ao Objective-C:
@objc
fonte
dismiss
.extension [your class name]
bloco, fora da classe.Eu encontrei essa solução. Recebemos esse erro devido a esses dois motivos mencionados abaixo.
Código de autorização
didFinishPickingMediaWithInfo
Errado:
Certo
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.
fonte
picker.dismiss(animated: true, completion: nil)
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!
Tenho certeza de que alguém pode lhe dizer como fazer o mesmo no Swift.
fonte
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:
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 oUINavigationControllerDelegate
como um dos protocolos:2) Certifique-se de que o info.plist tenha a
Privacy - Photo library Usage Description
chave e o valor String definidos.Obviamente, você precisa criar um
UIImagePickerController
e definir seu delegado igual aself
emViewDidLoad()
:fonte
Corrigi esse problema, chame a função abaixo em viewdidload ou viewWillAppear ou viewDidAppear para verificar a permissão para seu aplicativo.
E para usar o método acima, não se esqueça de adicionar
import Photos
no topo da classe.fonte
XCODE 10.1 / SWIFT 4.2:
Adicione as permissões necessárias (outros mencionados)
Implemente esta função delegada:
fonte
* 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 = self
noviewDidLoad
porque eu COPIO e COLO do meu outro viewController e esqueci disso!Espero que ajude alguém, reveja sua CÓPIA / COLAR primeiro !!!
fonte
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á.
fonte
Se você ainda não fez isso, tente isso .
Isso resolve meu problema.
fonte
NSLog
.Isso corrige o problema no Swift 4:
Altere o código abaixo
para isso:
fonte
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 selecionadorfonte
Certifique-se de que você está extendendo ambos:
UIImagePickerControllerDelegate, UINavigationControllerDelegate
.Além disso, lembre-se de definir o delegado:
Créditos para esta fonte .
fonte
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:
ao invés de
fonte
Objective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
extension
bloco?Corrigido definindo um atraso de 1 segundo ao definir a imagem.
fonte
Certifique-se de adicionar
internal func
no início e, em seguida, adicione as minúsculas após o parêntese (_ picker: UIImagePickerController…
e, em seguida, mude deAnyObject
paraAny
] ...Verifique o código abaixo:
fonte
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@objc
antes da função.https://forums.developer.apple.com/thread/82105
fonte
Isso resolveu meu erro:
fonte
Verifique pelos passos a seguir:
Tem acesso ao álbum:
Presente UIImagePickerController
A etapa principal, certifique-se de que o método delegado seja como seguir estritamente
fonte
Isso é o que eu fiz e resolveu meu problema.
Espero que isto ajude!
fonte
internal
é o padrão; Eu me pergunto que diferença faz especificá-lo ...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).
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.
fonte
use este código
fonte
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
ImagePicker.swift
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.
fonte
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 Description
oInfo.plist
com uma String que aparecerá quando seu aplicativo tentar acessar a Biblioteca de fotos do usuário pela primeira vez.Os
Info.plist
ajustes finais devem ser mais ou menos assim:fonte
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
E, claro, peça permissão para acessar a biblioteca de fotos primeiro, conforme os comentários acima.
fonte
No meu final,
UINavigationControllerDelegate
falta delegado.class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
fonte
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.
fonte
Eu li todas essas respostas e modifiquei um pouco aqui e não precisei dispensar, isso funcionou para mim, obrigado outros que responderam aqui.
fonte
encontrei a solução do IMage PickerView .....
fonte
clique em imageView para carregar a imagem da biblioteca de fotos e mostrar a visualização na mesma imagem. no swift 4
fonte
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:
fonte