J'essaye d'afficher une image de la photothèque dans une UIImageView
L'erreur complète est:
09/06/2017 21: 55: 59.063307 + 0200 firstapp2.0 [12873: 1120778] Erreur de découverte PhotoPicker: Domaine d'erreur = Code PlugInKit = 13 "requête annulée" UserInfo = {NSLocalizedDescription = requête annulée}
Mon code est inclus ci-dessous:
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
les valeurs du dictionnaire sont converties en id dans obj-c. J'ai également implémenté la demande d'autorisation et la gestion pour accéder à la photothèque de l'utilisateur: toujours le message d'erreur. J'ai ajouté dans le fichier info.plist l'entrée de confidentialité pour l'utilisation de la photothèque de l'utilisateur.Réponses:
Vous devez faire une référence Objective-C explicite:
@objc
la source
dismiss
.extension [your class name]
bloc, en dehors de la classe.J'ai trouvé cette solution. Nous avons eu cette erreur pour ces deux raisons qui sont mentionnées ci-dessous.
Code d'autorisation
didFinishPickingMediaWithInfo
Faux:
Droite
J'espère que cette solution vous aidera à résoudre cette erreur.
Si cela fonctionne pour vous, n'oubliez pas de le marquer comme correct, cela aidera les autres à trouver le bon chemin.
la source
picker.dismiss(animated: true, completion: nil)
Je l'ai trouvé! Il essaie de vous dire que vous n'avez pas l'autorisation de "photos" Vous devez inclure le
#import <Photos/Photos.h>
et demander une autorisation par exemple comme celui-ci dans Objective-C.J'espère que cela vous fera gagner du temps. J'ai passé deux jours entiers à déboguer ça!
Je suis sûr que quelqu'un peut vous dire comment faire de même dans Swift.
la source
J'ai essayé quelques-unes des réponses combinées sans grand succès.
En utilisant Swift 4, j'ai constaté que je devais m'assurer que les deux éléments suivants étaient mis en œuvre pour m'assurer que l'image était sélectionnée et placée dans le sélecteur (notez que les erreurs "[découverte] rencontrées lors de la découverte d'extensions:
le message s'affiche toujours dans la console, mais il ne vous empêche pas d'ajouter une image). Peut-être s'agit-il d'un message qui entraîne le rejet du sélecteur?
1) Le délégué pour le
UIImagePickerController
est(UIImagePickerControllerDelegate & UINavigationControllerDelegate)?
donc besoin d'ajouter explicitement leUINavigationControllerDelegate
comme l'un des protocoles:2) Assurez-vous que info.plist a la
Privacy - Photo library Usage Description
clé et la valeur de chaîne définies.Bien sûr, vous devez vous assurer de créer un
UIImagePickerController
et de définir son délégué égal àself
inViewDidLoad()
:la source
J'ai résolu ce problème, appelez la fonction ci-dessous dans viewdidload ou viewWillAppear ou viewDidAppear pour vérifier l'autorisation de votre application.
Et pour utiliser la méthode ci-dessus, n'oubliez pas d'ajouter
import Photos
en haut de la classe.la source
XCODE 10.1 / SWIFT 4.2:
Ajouter les autorisations requises (autres mentionnées)
Implémentez cette fonction déléguée:
la source
* DELEGATE manquant * dans Swift 3
Dans mon cas, tous les paramètres étaient corrects:
1 - Délégués (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - Autorisations déjà vérifiées;
3 - Plist déjà fait;
4 - Tout ce que j'ai lu sur ces réponses, je l'ai fait;
Mais j'ai oublié de mettre
pickerview.delegate = self
en œuvre surviewDidLoad
Parce que je copier et coller de mon autre viewController et d' oublier ça!J'espère que cela aidera quelqu'un, examinez d'abord votre COPIE / COLLE !!!
la source
Ce n'est peut-être pas la réponse la plus directement utile - mais j'espère que cela vous aidera! Je suis sûr à 99% que ce message d'erreur particulier ne vous indique pas le vrai problème. J'ai passé des heures à m'arracher les cheveux sur ce même problème.
1) J'avais l'autorisation d'imprimer des photos sur la console lorsque je lançais mon sélecteur, 2) Je pouvais naviguer et choisir une photo assez facilement, et 3) lorsque je me renvoyais à ma vue en rejetant le sélecteur, mon image de bouton n'a pas été mis à jour avec la nouvelle photo ... et le seul indice que j'ai eu au problème était le même message d'erreur que vous recevez.
Il s'avère que je codais en dur une image d'espace réservé dans ViewWillAppear au lieu de ViewDidLoad. Chaque fois que le sélecteur rejetait, il appelait ViewWillAppear et remplaçait l'image de mon choix par mon image codée en dur. J'ai résolu ce problème et bien sûr - tout fonctionne bien maintenant ... et je vois toujours ce message d'erreur à chaque fois que je reviens du sélecteur.
Je recommande de chercher ailleurs que ImagePicker pour votre problème et vous le trouverez probablement.
la source
Si vous ne l'avez pas fait, essayez ceci .
Cela résout mon problème.
la source
NSLog
.Cela résout le problème dans Swift 4:
Changez le code ci-dessous
pour ça:
la source
J'ai reçu le même message lorsque j'essayais de présenter un autre contrôleur à partir du rappel du sélecteur
imagePickerController
. La solution qui a fonctionné pour moi était de déplacer mon code dans le rappel d'achèvement de la méthode de rejet du sélecteurla source
Assurez-vous les deux sous - classement:
UIImagePickerControllerDelegate, UINavigationControllerDelegate
.N'oubliez pas non plus de définir le délégué:
Crédits à cette source .
la source
Trouver la solution à ce problème m'a pris une éternité. Il semble que le problème soit que la fonction imagePickerController de UIImagePickerControllerDelegate est introuvable. Si vous avez correctement défini le délégué et qu'il a cessé de fonctionner après la mise à niveau vers Swift 4, le problème est probablement que vous ne l'avez pas rendu accessible à Objective-C en utilisant @objc, ce qui est requis depuis Swift 4.
Cela doit être:
au lieu de
la source
Objective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
extension
bloc?Correction de ce problème en définissant un délai de 1 seconde lors du réglage de l'image.
la source
Assurez-vous d'ajouter
internal func
au début, puis ajoutez les minuscules après la parenthèse (_ picker: UIImagePickerController…
puis passez deAnyObject
àAny
]…Vérifiez le code ci-dessous:
la source
Cela m'a laissé perplexe, mais la réponse au lien ci-dessous a fonctionné pour moi. L'erreur a disparu et l'image s'affiche comme prévu
Comme l'une des réponses ci-dessus, vous devez avoir
(_ picker...
mais aussi@objc
avant la fonction.https://forums.developer.apple.com/thread/82105
la source
Cela a résolu mon erreur:
la source
Veuillez vérifier par étapes comme suit:
A accès à l'album:
Présenter UIImagePickerController
L'étape clé, assurez-vous que la méthode déléguée est comme suivre strictement
la source
C'est ce que j'ai fait et cela a résolu mon problème.
J'espère que cela t'aides!
la source
internal
est la valeur par défaut; Je me demande quelle différence ça fait de le préciser ...Dans mon cas, j'obtenais cette erreur parce que je présentais un contrôleur de sélection d'images sans vérifier au préalable si l'utilisateur avait autorisé l'accès aux images. Ailleurs dans mon code, l'utilisateur avait accordé l'autorisation, je pense donc que tout ce que j'avais à faire était d'importer des photos. Cependant, comme ils `` peuvent '' ne pas avoir donné l'autorisation à ce stade dans l'application, l'ajout de cela juste avant de présenter le contrôleur de sélection d'images a résolu le problème pour moi (importer des photos également).
Si cette réponse semble redondante, je m'excuse, mais j'ai dû reconstituer quelques réponses différentes pour que ma solution fonctionne. Cela aidera peut-être quelqu'un d'autre à utiliser Swift 4.
la source
utiliser ce code
la source
Cette erreur "Domaine d'erreur = Code PlugInKit = 13" a dérouté beaucoup de gens même si cela semble être un message de débogage Apple inoffensif. J'avais du mal à obtenir l'image que j'avais choisie pour définir dans mon interface utilisateur et je pensais que cette erreur était le problème, mais c'était quelque chose d'un peu plus subtil.
J'ai mon contrôleur de sélecteur d'images dans un fichier séparé du contrôleur de vue qui le présente.
MyViewController.swift
ImagePicker.swift
La plupart des didacticiels et des réponses ont une complétion définie sur zéro. Cependant, si vous définissez la complétion sur nil et appelez la méthode didSelect du délégué séparément, la méthode est appelée mais l'image n'est pas définie, assurez-vous donc d'utiliser la complétion de rejet.
Et encore une fois, je sais que cette réponse n'est peut-être pas directement liée à la question initiale, mais j'ai le sentiment que beaucoup de gens viennent ici pour ce problème et que les solutions données n'aident pas. La raison en est que la plupart des personnes qui donnent des réponses ont leur contrôleur de sélection d'images dans la même classe que leur contrôleur de vue principal et n'ont donc pas besoin d'utiliser une complétion.
la source
L'erreur se produit également lorsque vous n'avez pas configuré les autorisations d'utilisation de la photothèque en vous
Info.plist
fichier.Vous devez ajouter
Privacy - Photo Library Usage Description
leInfo.plist
avec une chaîne qui apparaîtra lorsque votre application essaiera pour la première fois d'accéder à la photothèque de l'utilisateur.Les
Info.plist
ajustements finaux devraient ressembler à ceci:la source
J'ai la même erreur et je l'ai corrigée de cette façon:
obtenir l'objet image de manière différente dépend de UIImagePickerController allowEditing est vrai ou faux
Et bien sûr, demandez d'abord la permission d'accéder à la photothèque comme dans les commentaires ci-dessus.
la source
De mon côté, le
UINavigationControllerDelegate
délégué est manquant.class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
la source
Dans mon cas, la gestion de la mémoire d'allocation rapide semble être optimisée et corrigée par Apple Team. Mon code fonctionnait parfaitement jusqu'à une mise à jour rapide et j'ai trouvé que mon "erreur" était que je ne conservais pas le sélecteur, mais cela fonctionne depuis des lustres sans rétention, alors voici une solution prête à l'emploi.
Et
la source
J'ai rencontré le même problème. Aucune des suggestions mentionnées ci-dessus n'a fonctionné pour moi. Cependant, je l'ai résolu, en appelant explicitement le picker.dismiss et en rejetant le message. Je ne sais pas pourquoi j'ai fait des appels de licenciement comme ça, mais cela a fonctionné pour moi.
la source
J'ai lu toutes ces réponses et un peu modifié ici et pas besoin de rejeter, cela a fonctionné pour moi, Merci à tous ceux qui ont répondu ici.
la source
j'ai trouvé la solution d'IMage PickerView .....
la source
cliquez sur imageView pour charger l'image de la photothèque et afficher l'aperçu sur la même vue d'image. sur swift 4
la source