Ich versuche, ein Bild aus der Fotobibliothek in einer UIImageView anzuzeigen
Der vollständige Fehler ist:
2017-06-09 21: 55: 59.063307 + 0200 firstapp2.0 [12873: 1120778] PhotoPicker-Erkennungsfehler: Fehler Domain = PlugInKit Code = 13 "Abfrage abgebrochen" UserInfo = {NSLocalizedDescription = Abfrage abgebrochen}
Mein Code ist unten enthalten:
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
Die Wörterbuchwerte werden in obj-c als ID umgewandelt. Ich habe auch die Autorisierungsanforderung und -behandlung für den Zugriff auf die Fotobibliothek des Benutzers implementiert: Es wird weiterhin die Fehlermeldung angezeigt. Ich habe in der Datei info.plist den Datenschutzeintrag für die Fotobibliothek des Benutzers hinzugefügt.Antworten:
Sie müssen eine explizite Objective-C-Referenz angeben:
@objc
quelle
dismiss
.extension [your class name]
Block außerhalb der Klasse schreiben .Ich habe diese Lösung gefunden. Wir haben diesen Fehler aufgrund dieser beiden unten genannten Gründe erhalten.
Autorisierungscode
didFinishPickingMediaWithInfo
Falsch:
Richtig
Ich hoffe, diese Lösung hilft Ihnen, diesen Fehler zu beheben.
Wenn es für Sie funktioniert, vergessen Sie nicht, es als korrekt zu markieren. Dies hilft anderen, den richtigen Weg zu finden.
quelle
picker.dismiss(animated: true, completion: nil)
Ich habe es gefunden! Es wird versucht, Ihnen mitzuteilen, dass Sie keine Berechtigung für "Fotos" haben
#import <Photos/Photos.h>
Berechtigung beispielsweise in Objective-C aufnehmen und anfordern.Ich hoffe, das spart Ihnen Zeit. Ich habe zwei volle Tage damit verbracht, dies zu debuggen!
Ich bin sicher, jemand kann Ihnen sagen, wie Sie dasselbe in Swift tun können.
quelle
Versuchte einige der Kombinationsantworten ohne großen Erfolg.
Bei Verwendung von Swift 4 musste ich sicherstellen, dass die folgenden zwei Elemente implementiert wurden, um sicherzustellen, dass das Bild ausgewählt und in die Auswahl eingefügt wurde (beachten Sie, dass beim Erkennen von Erweiterungen "[Discovery] -Fehler aufgetreten sind:
Die Meldung wird weiterhin in der Konsole angezeigt, hindert Sie jedoch nicht daran, ein Bild hinzuzufügen. Vielleicht ist dies eine Nachricht, die dazu führt, dass der Kommissionierer entlassen wird?
1) Der Beauftragte für die
UIImagePickerController
ist(UIImagePickerControllerDelegate & UINavigationControllerDelegate)?
so notwendig , um explizit die hinzuzufügenUINavigationControllerDelegate
als eines des Protokolls:2) Stellen Sie sicher, dass in der info.plist der
Privacy - Photo library Usage Description
Schlüssel- und String-Wert festgelegt ist.Natürlich müssen Sie sicherstellen, dass Sie einen erstellen
UIImagePickerController
und seinen Delegaten gleich setzenself
inViewDidLoad()
:quelle
Ich habe dieses Problem behoben. Rufen Sie die folgende Funktion in viewdidload oder viewWillAppear oder viewDidAppear auf, um die Berechtigung für Ihre App zu überprüfen.
Und um die obige Methode zu verwenden, vergessen Sie nicht,
import Photos
oben in der Klasse hinzuzufügen .quelle
XCODE 10.1 / SWIFT 4.2:
Erforderliche Berechtigungen hinzufügen (andere erwähnt)
Implementieren Sie diese Delegatenfunktion:
quelle
* Fehlendes DELEGATE * in Swift 3
In meinem Fall waren alle Einstellungen korrekt:
1 - Delegates (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - Berechtigungen bereits überprüft;
3 - Plist bereits fertig;
4 - Alles, was in diesen Antworten gelesen wurde, habe ich getan;
Aber ich vergaß zu implementieren
pickerview.delegate = self
aufviewDidLoad
Weil ich Kopieren und einfügen von meinen anderen Viewcontroller und vergessen , dass!Ich hoffe es hilft jemandem, überprüfen Sie zuerst Ihre KOPIE / PASTE !!!
quelle
Dies ist möglicherweise nicht die direkt hilfreichste Antwort - aber hoffentlich hilft es! Ich bin mir zu 99% sicher, dass diese spezielle Fehlermeldung Sie nicht auf das eigentliche Problem hinweist. Ich verbrachte Stunden damit, mir wegen genau dieses Problems die Haare auszureißen.
1) Ich hatte die Berechtigung zum Drucken von Fotos auf der Konsole, als ich meine Auswahl startete, 2) ich konnte einfach genug navigieren und ein Foto auswählen, und 3) als ich mich nach dem Schließen der Auswahl wieder zu meiner Ansicht zurückzog, mein Schaltflächenbild wurde nicht mit dem neuen Foto aktualisiert ... und der einzige Hinweis, den ich auf das Problem hatte, war genau die gleiche Fehlermeldung, die Sie erhalten.
Es stellte sich heraus, dass ich ein Platzhalterbild in ViewWillAppear anstelle von ViewDidLoad fest codiert habe. Jedes Mal, wenn der Picker entlassen wurde, rief er ViewWillAppear auf und ersetzte mein ausgewähltes Bild durch mein fest codiertes Bild. Ich habe dieses Problem behoben und sicher genug - jetzt funktioniert alles einwandfrei ... und ich sehe diese Fehlermeldung immer noch jedes Mal, wenn ich vom Picker zurückkomme.
Ich empfehle, nach einem anderen Ort als dem ImagePicker für Ihr Problem zu suchen, und Sie werden es wahrscheinlich finden.
quelle
Wenn Sie dies noch nicht getan haben, versuchen Sie dies .
Es löst mein Problem.
quelle
NSLog
.Dies behebt das Problem in Swift 4:
Ändern Sie den folgenden Code
dazu:
quelle
Ich habe die gleiche Meldung erhalten, als ich versucht habe, einen anderen Controller aus dem Picker-Rückruf zu präsentieren
imagePickerController
. Die Lösung, die für mich funktioniert hat, bestand darin, meinen Code innerhalb des Abschlussrückrufs von der Picker-Entlassungsmethode zu verschiebenquelle
Stellen Sie sicher, dass Sie beide Unterklassen haben :
UIImagePickerControllerDelegate, UINavigationControllerDelegate
.Denken Sie auch daran, den Delegaten festzulegen:
Credits zu dieser Quelle .
quelle
Die Lösung für dieses Problem zu finden, hat mich für immer gekostet. Es sieht so aus, als ob das Problem darin besteht, dass die Funktion imagePickerController des UIImagePickerControllerDelegate nicht gefunden werden kann. Wenn Sie den Delegaten richtig eingestellt haben und er nach dem Upgrade auf Swift 4 nicht mehr funktioniert, besteht das Problem wahrscheinlich darin, dass Sie ihn mit @objc, das seit Swift 4 erforderlich ist, nicht für Objective-C zugänglich gemacht haben.
Es muss sein:
anstatt
quelle
Objective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
extension
Block eingefügt ?Es wurde behoben, indem beim Einstellen des Bildes eine Verzögerung von 1 Sekunde eingestellt wurde.
quelle
Stellen Sie sicher, dass Sie
internal func
am Anfang hinzufügen und dann nach der Klammer Kleinbuchstaben einfügen (_ picker: UIImagePickerController…
und wechseln Sie dann vonAnyObject
zuAny
]…Überprüfen Sie den folgenden Code:
quelle
Das hat mich verblüfft, aber die Antwort unter dem folgenden Link hat bei mir funktioniert. Der Fehler ist verschwunden und das Bild wird wie erwartet angezeigt
Wie eine der obigen Antworten muss man
(_ picker...
aber auch@objc
vor der Funktion haben.https://forums.developer.apple.com/thread/82105
quelle
Dies löste meinen Fehler:
quelle
Bitte überprüfen Sie die folgenden Schritte:
Hat Zugriff auf das Album:
Präsentieren Sie UIImagePickerController
Stellen Sie im Schlüsselschritt sicher, dass die Delegatenmethode genau wie folgt ist
quelle
Dies ist, was ich getan habe und es hat mein Problem gelöst.
Hoffe das hilft!
quelle
internal
ist die Standardeinstellung; Ich frage mich, welchen Unterschied es macht, es zu spezifizieren ...In meinem Fall wurde dieser Fehler angezeigt, weil ich einen Bildauswahl-Controller präsentierte, ohne vorher zu überprüfen, ob der Benutzer Zugriff auf Bilder gewährt hatte. An anderer Stelle in meinem Code hatte der Benutzer die Erlaubnis erteilt, sodass ich glaube, dass ich nur Fotos importieren musste. Da sie jedoch zu diesem Zeitpunkt in der App möglicherweise keine Berechtigung erteilt haben, hat das Hinzufügen des Problems kurz vor der Präsentation des Bildauswahl-Controllers das Problem für mich gelöst (auch Fotos importieren).
Wenn diese Antwort überflüssig erscheint, entschuldige ich mich, aber ich musste einige andere Antworten zusammenstellen, damit meine Lösung funktioniert. Vielleicht hilft dies jemand anderem, der Swift 4 verwendet.
quelle
Verwenden Sie diesen Code
quelle
Dieser Fehler "Error Domain = PlugInKit Code = 13" hat viele Leute verwirrt, obwohl es sich anscheinend um eine harmlose Apple-Debug-Nachricht handelt. Ich hatte Probleme, das von mir ausgewählte Bild in meiner Benutzeroberfläche festzulegen, und dachte, dass dieser Fehler das Problem war, aber etwas subtiler.
Ich habe meinen Bildauswahl-Controller in einer Datei, die von dem Ansichts-Controller getrennt ist, der ihn präsentiert.
MyViewController.swift
ImagePicker.swift
Bei den meisten Tutorials und Antworten ist der Abschluss auf Null gesetzt. Wenn Sie jedoch die Vervollständigung auf Null setzen und die didSelect-Methode des Delegaten separat aufrufen, wird die Methode aufgerufen, das Image wird jedoch nicht festgelegt. Stellen Sie daher sicher, dass Sie die Vervollständigung "Entlassen" verwenden.
Und wieder weiß ich, dass diese Antwort möglicherweise nicht direkt mit der ursprünglichen Frage zusammenhängt, aber ich habe das Gefühl, dass viele Leute wegen dieses Problems hierher kommen und die gegebenen Lösungen nicht helfen. Der Grund dafür ist, dass die meisten Personen, die Antworten geben, ihren Bildauswahl-Controller in derselben Klasse wie ihren Hauptansichts-Controller haben und daher keine Vervollständigung verwenden müssen.
quelle
Der Fehler tritt auch auf, wenn Sie die Berechtigungen für die Verwendung der Fotobibliothek in Ihrer
Info.plist
Datei nicht konfiguriert haben .Sie müssen
Privacy - Photo Library Usage Description
dieInfo.plist
mit einer Zeichenfolge hinzufügen, die angezeigt wird, wenn Ihre App zum ersten Mal versucht, auf die Fotobibliothek des Benutzers zuzugreifen.Die endgültigen
Info.plist
Anpassungen sollten ungefähr so aussehen:quelle
Ich habe den gleichen Fehler und habe ihn folgendermaßen behoben:
Das Abrufen des Bildobjekts auf unterschiedliche Weise hängt von UIImagePickerController ab. Erlaubt, dass die Bearbeitung wahr oder falsch ist
Bitten Sie natürlich zuerst um die Erlaubnis, auf die Fotobibliothek zuzugreifen, wie in den obigen Kommentaren angegeben.
quelle
An meinem Ende
UINavigationControllerDelegate
fehlt der Delegierte.class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
quelle
Ich bin auf das gleiche Problem gestoßen. Keiner der oben genannten Vorschläge hat bei mir funktioniert. Ich habe es jedoch gelöst, indem ich explizit den picker.dismiss angerufen und das Posting entlassen habe. Mir ist nicht klar, warum ich solche Entlassungsanrufe getätigt habe, aber es hat bei mir funktioniert.
quelle
Ich habe all diese Antworten gelesen und hier ein wenig modifiziert und musste nicht entlassen werden. Dies hat bei mir funktioniert. Vielen Dank an andere, die hier geantwortet haben.
quelle
Ich fand die Lösung von IMage PickerView .....
quelle
Klicken Sie auf imageView, um das Bild aus der Fotobibliothek zu laden und die Vorschau in derselben Bildansicht anzuzeigen. auf schnell 4
quelle
Hatte das gleiche Problem auf Swift 4.2 und Xcode 10.0 . Obwohl die Bildauswahl ordnungsgemäß funktionierte, zeigte Xcode diesen Fehler auf der Konsole an. Um dies loszuwerden:
quelle