wake-up-neo.com

PhotoPicker-Erkennungsfehler: Fehler Domain = PlugInKit-Code = 13

Ich versuche, ein Bild aus der Fotobibliothek in einer UIImageView-Ansicht anzuzeigen

Der volle 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 aufgeführt: 

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)
    }
}
87
Kreason Naidoo

Sie müssen einen expliziten Verweis auf Objective-C angeben: @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)
}
25

Ich habe es gefunden! Es wird versucht, Ihnen mitzuteilen, dass Sie keine Berechtigung für "Fotos" haben. Sie müssen den #import <Photos/Photos.h> angeben und die Berechtigung zum Beispiel in Objective-C anfordern.

Ich hoffe, das wird Ihnen etwas Zeit sparen. Ich habe zwei volle Tage damit verbracht, das zu debuggen!

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

Ich bin sicher, dass Ihnen jemand sagen kann, wie Sie es in Swift genauso machen.

16

Ich habe diese Lösung gefunden. Wir haben diesen Fehler aufgrund dieser zwei Gründe erhalten, die unten erwähnt werden.

  1. Zuerst müssen wir diese Methode zur Autorisierung aufrufen

Zugangscode

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. Methode korrekt aufrufen Aufruf von didFinishPickingMediaWithInfo 

Falsch:

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

Recht

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

Ich hoffe, dass diese Lösung Ihnen helfen wird, diesen Fehler zu beheben. 

Wenn es für Sie funktioniert, vergessen Sie nicht, es als korrekt zu kennzeichnen. Dies hilft anderen, den richtigen Weg zu finden.

14
user3159598

Versuchte ein paar der kombinierten Antworten ohne großen Erfolg. 

Bei Verwendung von Swift 4 musste ich sicherstellen, dass die folgenden beiden Elemente implementiert wurden, um sicherzustellen, dass das Bild ausgewählt und in den Picker eingefügt wurde. 

Fehler Domain = PlugInKit Code = 13 "Abfrage abgebrochen" UserInfo = {NSLocalizedDescription = Abfrage abgebrochen} "

die Meldung wird weiterhin in der Konsole angezeigt, aber Sie können nicht ein Bild hinzufügen. Vielleicht ist dies eine Nachricht, die dazu führt, dass der Kommissionierer abgewiesen wird.

1) Der Delegat für die Variable UIImagePickerController ist (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?, daher müssen Sie die Variable UINavigationControllerDelegate explizit als eines der Protokolle hinzufügen: 

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

2) Stellen Sie sicher, dass in der info.plist der Wert Privacy - Photo library Usage Description und der String-Wert festgelegt sind.

Natürlich müssen Sie sicherstellen, dass Sie eine UIImagePickerController erstellen und deren Stellvertreter in ViewDidLoad() auf self setzen: 

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

Ich habe dieses Problem behoben. Rufen Sie die Funktion unten in viewdidload oder viewWillAppear oder viewDidAppear auf, um die Berechtigung für Ihre App zu überprüfen.

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

Um die obige Methode zu verwenden, vergessen Sie nicht, import Photos oben in der Klasse hinzuzufügen.

10
logan.Nguyen

Wenn Sie dies nicht getan haben, versuchen Sie this .

Produkt> Schema> Bearbeitungsschema> Umgebungsvariablen OS_ACTIVITY_MODE: disable

Es löst mein Problem.

10
Changnam Hong

* DELEGATE fehlt * in Swift 3

In meinem Fall waren alle Einstellungen korrekt:
1 - Delegaten (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - Bereits verifizierte Berechtigungen;
3 - Plist bereits gemacht;
4 - Alles, was in diesen Antworten gelesen wurde, habe ich gemacht;

Aber ich habe vergessen, pickerview.delegate = self auf viewDidLoad.__ zu implementieren, weil ich COPY und PASTE von meinem anderen viewController verwende und das vergesse!

Ich hoffe, es hilft jemandem. Überprüfe zuerst deine COPY/PASTE !!!

Dies ist möglicherweise nicht die direkt hilfreichste Antwort - aber hoffentlich wird es helfen! Ich bin zu 99% sicher, dass diese bestimmte Fehlermeldung nicht wirklich auf das eigentliche Problem hinweist. Ich habe stundenlang meine Haare über genau diesen Punkt gezogen. 

1) Ich hatte die Berechtigung zum Drucken von Fotos auf der Konsole, als ich meinen Picker startete. 2) Ich konnte einfach navigieren und ein Foto auswählen, und 3) wenn ich mich nach dem Schließen des Pickers, meines Tastenbildes, wieder in meiner Ansicht befinde wurde nicht mit dem neuen Foto aktualisiert ... und der einzige Hinweis, den ich auf das Problem hatte, war genau die Fehlermeldung, die Sie erhalten.

Es stellte sich heraus, dass ich ein Platzhalterbild in ViewWillAppear anstelle von ViewDidLoad hartcodiert hatte. Jedes Mal, wenn der Picker abgewiesen wurde, rief er ViewWillAppear an und ersetzte mein ausgewähltes Bild durch mein hartcodiertes Bild. Ich habe dieses Problem behoben und sicher - alles funktioniert jetzt einwandfrei ... und ich sehe diese Fehlermeldung immer noch, wenn ich vom Picker zurückkomme.

Ich empfehle Ihnen, an einem anderen Ort als ImagePicker nach Ihrem Problem zu suchen, und Sie werden es wahrscheinlich finden.

4
Levi Lais

XCODE 10.1/Swift 4.2:

  1. Erforderliche Berechtigungen hinzufügen (andere erwähnt)

  2. Implementiere diese Delegierte-Funktion:

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

Dies behebt das Problem in Swift 4:

Ändern Sie den Code unten

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

zu diesem:

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


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

Ich habe dieselbe Meldung erhalten, als ich versuchte, einen anderen Controller aus dem Picker-Callback imagePickerController zu präsentieren. Die Lösung, die für mich funktionierte, bestand darin, meinen Code innerhalb der Callback-Methode für die Fertigstellung von der Methode zum Entnehmen von Pickern zu verschieben

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)
            }
        }
    }
3
Mario Vasile

Stellen Sie sicher, dass Sie beide Klassen definieren: UIImagePickerControllerDelegate, UINavigationControllerDelegate.

Denken Sie auch daran, den Delegierten festzulegen:

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

Kredite an diese Quelle .

3
Ryan G

Das hatte mich verblüfft, aber die Antwort auf den Link unten funktionierte für mich. Der Fehler ist verschwunden und das Bild wird wie erwartet angezeigt

Wie eine der obigen Antworten müssen Sie (_ picker... aber auch @objc vor der Funktion haben.

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

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

3
EGibson

Stellen Sie sicher, dass Sie internal func am Anfang und dann die Kleinbuchstaben nach den Klammern hinzufügen (_ picker: UIImagePickerController… und ändern Sie dann von AnyObject in Any]…).
Überprüfen Sie den Code unten:

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
Sabino Diaz

In meinem Fall wurde mir diese Fehlermeldung angezeigt, weil ich einen Bildwähler-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. Ich denke, ich musste nur Fotos importieren. Da sie zu diesem Zeitpunkt in der App jedoch möglicherweise noch keine Erlaubnis erteilt haben, fügen sie diese hinzu, bevor ich den Image Picker Controller vorstellte, der das Problem für mich gelöst hat (Fotos importieren).

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

        })
    }

Wenn diese Antwort überflüssig erscheint, entschuldige ich mich, aber ich musste mich aus ein paar anderen Antworten zusammensetzen, damit meine Lösung funktioniert. Vielleicht hilft dies jemandem, der Swift 4 einsetzt.

2
Jason Rybka

Festgelegt, indem beim Einstellen des Bildes eine Verzögerung von 1 Sekunde eingestellt wurde.

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

Das habe ich getan und mein Problem gelöst.

  • add @objc
  • intern hinzufügen
  • _ vor imagePicker hinzufügen 
  • stellen Sie sicher, dass Sie Any und nicht AnyObject verwenden

Hoffe das hilft!

2
FreitDev

verwenden Sie diesen Code

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

Bitte überprüfen Sie die folgenden Schritte:

  1. Fotos importieren
  2. Hat Zugriff auf das Album:

    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. Present 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. Der Schlüsselschritt, stellen Sie sicher, dass die Delegat-Methode dem strikten Befolgen von folgt.

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

Dies hat meinen Fehler behoben: 

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
iOS Developer

Das Finden der Lösung für dieses Problem hat mich für immer beschäftigt. Anscheinend besteht das Problem darin, dass die Funktion imagePickerController des UIImagePickerControllerDelegate nicht gefunden werden kann. Wenn Sie den Delegaten richtig eingestellt haben und nach dem Upgrade auf Swift 4 nicht mehr funktionieren, besteht das Problem wahrscheinlich darin, dass Sie ihn für Objective-C nicht mit @objc zugänglich gemacht haben, was seit Swift 4 erforderlich ist.

Es muss sein:

@objc func imagePickerController (...

anstatt 

func imagePickerController(...
2
Apfelsaft

Dieser Fehler "Fehlerdomäne = PlugInKit-Code = 13" hat viele Menschen verwirrt, obwohl es sich anscheinend um eine harmlose Apple Debug-Meldung handelt. Ich hatte Probleme, das Bild zu finden, das ich für meine Benutzeroberfläche ausgewählt hatte, und dachte, dass dieser Fehler das Problem war, es war jedoch etwas subtiler.

Ich habe meinen Bildauswahl-Controller in einer Datei, die von dem View-Controller, der ihn darstellt, getrennt ist.

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

Bei den meisten Tutorials und Antworten ist die Vervollständigung auf Null gesetzt. Wenn Sie die Vervollständigung jedoch 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 die Vervollständigung "dismiss" verwendet wird.

Auch hier 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 angegebenen 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.

1
Braden Holt

Der Fehler tritt auch auf, wenn Sie Sie haben die Berechtigungen für die Verwendung der Fotobibliothek nicht konfiguriert in Ihrer Info.plist-Datei.

Sie müssen Privacy - Photo Library Usage Description in Info.plist mit einem String hinzufügen, der angezeigt wird, wenn Ihre App zum ersten Mal versucht, auf die Fotobibliothek des Benutzers zuzugreifen.

Die endgültigen Info.plist-Anpassungen sollten in etwa wie folgt aussehen:  enter image description here

1
Knowledge

An meinem Ende fehlt UINavigationControllerDelegate Delegat.

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate

1
Aleem

Ich habe den gleichen Fehler und habe ihn auf diese Weise behoben:

das Abrufen eines Bildobjekts auf unterschiedliche Weise hängt von UIImagePickerControllerermöglicht ab

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

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

    ....

}

Und natürlich bitten Sie um Erlaubnis, zuerst auf die Fotobibliothek zuzugreifen.

1
melson.jao

Swift 5 und höher:

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
    }



func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        guard let image = info[.editedImage] as? UIImage else { return }
        dismiss(animated: true)
        chosenImage = image
        **pic.image = chosenImage**

    }

    @IBAction func tap(_ sender: Any) {
        self.text.text = "Kreason"
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        //imagePicker.dataSource = self
        imagePicker.allowsEditing = false
        self.present(imagePicker, animated: true)

    }
}
0
Xab Ion

ich habe die Lösung von IMage PickerView gefunden .....

@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
Muhammad Hamid

Verwenden Sie didFinishPickingMediaWithInfo

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        self.dismiss(animated: true, completion: nil)
        var chosenImage = info[UIImagePickerController.InfoKey.editedImage] as! UIImage
        userProfileImage.image = chosenImage

        uploadImage(chosenImage)
}
0

Ich bin auf das gleiche Problem gestoßen. Keiner der oben genannten Vorschläge hat für mich funktioniert. Ich löste es jedoch, indem ich den picker.dismiss explizit anrief und post abstelle. Mir ist nicht klar, warum ich solche Ablehnungen gemacht habe, aber es hat für mich funktioniert.

   @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
Vyshakh

In meinem Fall als Swift Allocation Memory Management scheint von Apple Team optimiert und behoben worden zu sein. Mein Code funktionierte perfekt bis zu einem Swift -Update und ich stellte fest, dass mein "Fehler" darin bestand, dass ich den Picker nicht beibehalten habe, aber er funktioniert seit Ewigkeiten ohne Beibehaltung.

// Add Privacy - Photo Library Usage Description to your info.plist
<key>NSPhotoLibraryUsageDescription</key>
<string>APPNAME need to access your pictures to violate your privacy :P</string>

Und

import Photos    
class MyImageSelector: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {

    var picker = UIImagePickerController() 
    // Make sure to retain this picker var until the picker returned

    func checkPermission() {
        let call = self.presentAuthorized

            let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
            switch photoAuthorizationStatus {
            case .authorized:
                print("Access is granted by user")
                showPicker()
            case .notDetermined:
                PHPhotoLibrary.requestAuthorization({ newStatus in
                print("status is \(newStatus)")
                if newStatus == PHAuthorizationStatus.authorized {
                    /* do stuff here */
                    print("success")
                    showPicker()
                }
                })
            case .restricted:
                print("User do not have access to photo album.")
            case .denied:
                print("User has denied the permission.")
            }

    }

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

    @objc public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        // DO something with picture
    }

    @objc public func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        // User cancelled the pick
    }
}
0
Benpaper

Klicken Sie auf imageView, um ein Bild aus der Fotobibliothek zu laden und die Vorschau in derselben Bildansicht anzuzeigen. auf 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
roshan posakya

Ich habe die ganzen Antworten gelesen und ein bisschen modifiziert und nicht abgewiesen, das hat für mich funktioniert.

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

Versuchen Sie, UIImagePickerController nicht innerhalb der Methode zu definieren, sondern als Klassenvariable zu definieren und nur einmal zu erstellen.

Ich hatte das gleiche Problem wie Sie, als ich vergaß, einen Delegaten für UIImagePickerController festzulegen

0
zvjerka24

Hatte das gleiche Problem auf Swift 4.2 und Xcode 10.0 . Obwohl der Bildwähler korrekt funktioniert hat Xcode diesen Fehler auf der Konsole angezeigt. Um das loszuwerden:

  • Im Xcode-Menü Produkt> Schema> Schema bearbeiten
  • Wählen Sie die Registerkarte "Ausführen" und dann "Argumente".
  • Fügen Sie im Abschnitt "Umgebungsvariablen" eine Variable mit Name OS_ACTIVITY_MODE und Value disable hinzu.
0
Marcos Reboucas