PhotoPicker खोज त्रुटि: त्रुटि डोमेन = PlugInKit कोड = 13


118

मैं UIImageView में फोटो लाइब्रेरी से एक छवि प्रदर्शित करने का प्रयास कर रहा हूं

पूर्ण त्रुटि है:

2017-06-09 21: 55: 59.063307 + 0200 फर्स्टएपी 2.0 [12873: 1120778] फोटोपिकर खोज त्रुटि: त्रुटि डोमेन = प्लगइनकिट कोड = 13 "क्वेरी रद्द" UserInfo = {NSLINizedDescription = क्वेरी रद्द}}

मेरा कोड नीचे शामिल है:

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

11
मुझे भी यही त्रुटि मिली। क्या आप Xcode 9 बीटा, iOS 11 का उपयोग कर रहे हैं?
जॉन

4
यह काम करता था ... और फिर iOS 11 बीटा 4 ने मुझे अचानक यह त्रुटि दी। बहुत अजीब।
user2153553

2
मुझे वही त्रुटि मिल रही है और मेरा कार्यान्वयन obj-c में है। यह त्रुटि संदेश उद्देश्य-ग में UIImagePicker प्रतिनिधि विधि में लौटाए गए जानकारी शब्दकोश के प्रकार से संबंधित नहीं हो सकता है: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)infoशब्दकोश मानों को obj-c में आईडी के रूप में डाला जाता है। मैंने उपयोगकर्ता के फोटो लाइब्रेरी तक पहुंचने के लिए प्राधिकरण अनुरोध और हैंडलिंग को भी लागू किया है: अभी भी त्रुटि संदेश मिल रहा है। मैंने info.plist फ़ाइल में उपयोगकर्ता के फोटो लाइब्रेरी उपयोग के लिए गोपनीयता प्रविष्टि जोड़ी है।
valeCocoa

2
मैं वर्तमान बग प्राप्त करता हूं, लेकिन यह मुझे लाइब्रेरी से छवि प्राप्त करने और बाद में इसका उपयोग करने से नहीं रोकता है ..
shokuroff

3
मैंने सभी उत्तरों के सभी सुझावों को संयुक्त रूप से आजमाया , कोई फायदा नहीं हुआ।
निकोलस मिआरी

जवाबों:


39

आपको स्पष्ट उद्देश्य-सी संदर्भ बनाने की आवश्यकता है: @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)
}

6
मेरे लिये कार्य करता है। मैंने हाल ही में स्विफ्ट 4 और एक्सकोड 9 को अपडेट किया था और इसने इसे हल किया।
user3144836

3
मेरे लिये कार्य करता है। 4.0 स्विफ्ट में माइग्रेट करने के बाद आवश्यक।
मयंक २३०30

4
काम नहीं करता है। मेरे द्वारा कॉल करने के बाद यह त्रुटि हुई dismiss
किमी चिउ

अजीब। हालांकि मेरे लिए यह एक चेतावनी के रूप में xcode का काम करता है और यह अपेक्षा करता है कि: 'इंस्टेंट विधि' imagePickerController ( : didFinishPickingMediaWithInfo :) 'लगभग आवश्यक वैकल्पिक' ImagePickerController : ( didFinishPickingMediaWithInfo :) 'प्रोटोकॉल की' UIImagePickerCrollerCrollerCrollerCroller के लिए आवश्यक है। : didFishishPickingMediaWithInfo :) 'इस चेतावनी को चुप करने के लिए निजी'
डार्क कैसल

@DarkCastle आपको फ़ंक्शन को extension [your class name]क्लास के बाहर एक ब्लॉक में लिखने की आवश्यकता है ।
प्रोमेथियो II

18

मुझे इसका हल मिल गया। इन दो कारणों के कारण हमें यह त्रुटि मिली जो नीचे उल्लिखित है।

  1. पहले हमें प्राधिकरण के लिए इस पद्धति को कॉल करने की आवश्यकता है

प्राधिकरण कोड

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. विधि का सही तरीका कॉलिंग didFinishPickingMediaWithInfo

गलत:

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

सही

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

मुझे उम्मीद है कि यह समाधान आपको इस त्रुटि को हल करने में मदद करेगा।

अगर यह आपके लिए काम करता है तो इसे सही मानकर चिन्हित करना न भूलें, इसलिए इससे दूसरे को सही रास्ता खोजने में मदद मिलेगी।


Noob PSA: PHPhotoLibrary स्विफ्ट के फोटो मॉड्यूल से है
ब्रैडेन होल्ट

काम नहीं करता है। त्रुटि तब होती है जब मैं कॉल करता हूँpicker.dismiss(animated: true, completion: nil)
ForceBru

17

मुझे यह मिला! यह आपको यह बताने की कोशिश कर रहा है कि आपके पास "फ़ोटो" के लिए प्राधिकरण नहीं #import <Photos/Photos.h>है। आपको उद्देश्य-सी में इस तरह के उदाहरण के लिए प्राधिकरण को शामिल करने और अनुरोध करने की आवश्यकता है।

आशा है कि यह आपको कुछ समय बचाएगा। मैंने इसे डिबग करने में पूरे दो दिन बिताए!

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

मुझे यकीन है कि कोई आपको बता सकता है कि स्विफ्ट में ऐसा कैसे करें।


1
#import <Photos / Photos.h> को शामिल करना सुनिश्चित करें
रॉबर्ट वॉनआउटका

6
इससे मेरी समस्या ठीक नहीं हुई।
Fi12

1
मुझे सांत्वना में नीचे संदेश मिल रहा है "निजी प्रभावी उपयोगकर्ता सेटिंग्स से पढ़ना। एक्सटेंशन की खोज करते समय त्रुटियों का सामना करना पड़ा: त्रुटि डोमेन = प्लगइनकिट कोड = 13" क्वेरी रद्द "UserInfo = {NSLocalizedDescription = क्वेरी रद्द}"। यह समस्या हल नहीं हुई।
बिरंची

15

बहुत सफलता के बिना संयोजन प्रतिक्रियाओं में से कुछ की कोशिश की।

स्विफ्ट 4 का उपयोग करते हुए, मैंने पाया कि मुझे यह सुनिश्चित करने के लिए आवश्यक था कि छवि को चुनने और उसे पिकर में रखने के लिए निम्नलिखित दो वस्तुओं को लागू किया गया था (ध्यान दें कि एक्सटेंशन की खोज करते समय "[खोज] त्रुटियां हुईं:"

त्रुटि डोमेन = PlugInKit कोड = 13 "क्वेरी रद्द" UserInfo = {NSLocalizedDescription = क्वेरी कोड "

संदेश अभी भी कंसोल में प्रदर्शित होता है, लेकिन यह आपको छवि जोड़ने से नहीं रोकता है)। शायद यह एक संदेश है जिसके परिणामस्वरूप पिकर को खारिज कर दिया गया है?

1) के लिए प्रतिनिधि UIImagePickerControllerहै (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?तो जरूरत स्पष्ट रूप से जोड़ने के लिए UINavigationControllerDelegateप्रोटोकॉल के रूप में:

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

2) सुनिश्चित करें कि info.plist के पास है Privacy - Photo library Usage Description कुंजी और स्ट्रिंग मूल्य सेट है।

बेशक, आप यह सुनिश्चित करें कि आप एक बनाने की जरूरत है UIImagePickerControllerऔर इसके प्रतिनिधि सेट करने के लिए बराबर selfमें ViewDidLoad():

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

4
मेरे पास मेरे प्रोजेक्ट में यह सब है .. फिर भी यह काम नहीं कर रहा है
मोहम्मद ली

धन्यवाद मैं दृश्य में प्रतिनिधि को स्थापित करने से चूक गया ()
अरशद शैक

11

मैंने इस समस्या को ठीक कर लिया है, नीचे दिए गए फ़ंक्शन को viewdidload या viewWillAppear या viewDidAppear में अपने ऐप के लिए अनुमति की जांच करने के लिए कहें।

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

और उपरोक्त विधि का उपयोग करने के लिए, import Photosकक्षा के शीर्ष पर जोड़ना न भूलें ।


11

XCODE 10.1 / SWIFT 4.2:

  1. आवश्यक अनुमतियाँ जोड़ें (अन्य उल्लिखित)

  2. इस प्रतिनिधि मंडल को लागू करें:

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

1
ImagePickerController func on Swift 4x का उपयोग करने का सही तरीका
Samet Sazak

10

* स्विफ्ट 3 में अनुपलब्ध *

मेरे मामले में, सभी सेटिंग्स सही थीं:
1 - प्रतिनिधि (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - अनुमतियाँ पहले से ही सत्यापित;
3 - पहले से ही किया गया प्लास्ट;
4 - इस उत्तर पर सब कुछ पढ़ा, मैंने किया;

लेकिन मैं लागू करने के लिए भूल गया pickerview.delegate = selfपरviewDidLoad क्योंकि मैं कॉपी और मेरे अन्य ViewController से पेस्ट और भूल जाते हैं कि!

मुझे आशा है कि यह किसी की मदद करेगा, पहले अपने COPY / PASTE की समीक्षा करें !!!


धन्यवाद, मैं लंबे समय से संघर्ष कर रहा हूं और मैंने "UINavigationControllerDelegate" को याद किया है, आपने आखिरकार बचा लिया, धन्यवाद
Sakthimuthiah

मदद के लिए खुशी :)
डैनियल एरेन्तेस लवरेड

8

यह सबसे सीधे मददगार जवाब नहीं हो सकता है - लेकिन उम्मीद है कि यह मदद करेगा! मुझे 99% यकीन है कि यह विशेष त्रुटि संदेश वास्तव में आपको वास्तविक समस्या की ओर इशारा नहीं कर रहा है। मैंने इस सटीक मुद्दे पर अपने बालों को खींचने में घंटों बिताए।

1) मेरे पास कंसोल के लिए फोटो प्रिंटिंग के लिए प्राधिकरण था जब मैं अपना पिकर लॉन्च करूंगा, 2) मैं नेविगेट कर सकता हूं और एक फोटो को आसानी से चुन सकता हूं, और 3) जब मैं पिकर को खारिज करने पर अपने विचार पर वापस आऊंगा, तो मेरी बटन छवि नई फ़ोटो के साथ अपडेट नहीं किया गया था ... और एकमात्र संकेत जो मुझे समस्या थी, ठीक वही त्रुटि संदेश था जो आप प्राप्त कर रहे हैं।

मुझे पता है कि मैं ViewDillLoad के बजाय ViewWillAppear में एक प्लेसहोल्डर छवि को हार्ड-कोडिंग कर रहा था। हर बार जब पिकर बर्खास्त होता था, तो वह ViewWillAppear को कॉल करता था और मेरी चुनी हुई छवि को मेरी हार्ड कोडित छवि से बदल देता था। मैंने उस मुद्दे को ठीक किया और पर्याप्त रूप से सुनिश्चित किया - अब सब कुछ ठीक चल रहा है ... और मैं अभी भी उस त्रुटि संदेश को देख रहा हूं, जब मैं पिकर से वापस लौटता हूं।

मैं आपकी समस्या के लिए ImagePicker के अलावा कहीं और देखने की सलाह देता हूं और आपको इसकी संभावना मिल जाएगी।


7

अगर आपने ऐसा नहीं किया है, तो यह कोशिश करें

उत्पाद> योजना> संपादन योजना> पर्यावरण चर OS_ACTIVITY_MODE: disable

यह मेरे मुद्दे को हल करता है।


23
यह त्रुटि संदेशों को दबा देता है लेकिन उनके कारण को संबोधित नहीं करता है। यह अन्य सिस्टम संदेशों और कुछ भी से भी दबा देता है NSLog
जॉन मोंटगोमरी

6
यह समस्या को 'हल' नहीं करता है, बस इसे अदृश्य बनाता है। बहुत बुरा अभ्यास।
ज़ीशान

यह आपकी गंदगी को गली के नीचे छुपाने के बराबर है
shiv

7

यह स्विफ्ट 4 में समस्या को हल करता है:

नीचे दिए गए कोड को बदलें

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

इसके लिए:

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


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

मेरी त्रुटि कुछ इस तरह दिखी: एक्सटेंशन की खोज करते समय त्रुटियां हुईं: त्रुटि डोमेन = प्लग इन कोड कोड = 13 "क्वेरी रद्द" उपयोगकर्ताइनफो = {NSLocalizedDescription = क्वेरी रद्द}} और इसने मेरी समस्या हल कर दी, हालाँकि मैं यह नहीं बोल सकता कि क्या यह आपकी मदद करता है ओपी । धन्यवाद :)
अग्रिप्पा

6

मुझे वही संदेश मिला जब मैं पिकर कॉलबैक से एक अन्य नियंत्रक पेश करने की कोशिश कर रहा था imagePickerController। जो समाधान मेरे लिए काम करता था वह पिकर बर्खास्त करने की विधि से पूरा कॉलबैक के अंदर मेरे कोड को स्थानांतरित करना था

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

शानदार उत्तर, आपने मेरा समय बचा लिया
कोडर ACJHP

अद्भुत काम किया! सोचो कि स्विफ्ट 4.x में पिकर त्रुटियों से निपटने का यह सही तरीका है।
शिव

4

सुनिश्चित करें कि आप दोनों को उपवर्गित कर रहे हैं UIImagePickerControllerDelegate, UINavigationControllerDelegate:।

इसके अलावा, प्रतिनिधि को सेट करना याद रखें:

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

इस स्रोत को श्रेय ।


picker.delegate = self - मेरा मामला था! धन्यवाद।
एलेक्सी चेक्कनोव

4

इस समस्या का हल ढूंढना मुझे हमेशा के लिए ले गया। यह समस्या की तरह लग रहा है कि UIImagePickerControllerDelegate की फ़ंक्शन छविPickerController नहीं मिल सकती है। यदि आपने प्रतिनिधि को सही तरीके से सेट किया है और यह स्विफ्ट 4 में अपग्रेड करने के बाद काम करना बंद कर दिया है, तो समस्या यह है कि आपने @objc का उपयोग करके ऑब्जेक्टिव-सी के लिए इसे सुलभ नहीं बनाया है जो स्विफ्ट 4 के बाद से आवश्यक है।

इसे होना चाहिए:

@objc func imagePickerController (...

के बजाय

func imagePickerController(...

यह त्रुटि बनाता हैObjective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
निको नील

वास्तव में, यह इसे ठीक करने का तरीका है!
मारिया ऑर्टेगा

@NicoNeill क्या आपने फ़ंक्शन को extensionब्लॉक में जोड़ा है ?
प्रोमेथियस II

4

छवि सेट करते समय 1 सेकंड की देरी से इसे ठीक किया।

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

3

जोड़ने के लिए सुनिश्चित करें कि internal funcशुरुआत में और फिर कोष्ठक के बाद लोअर केस जोड़ने ( _ picker: UIImagePickerController…और फिर से बदलने AnyObjectके लिए Any] ...
नीचे चेक कोड:

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

यह मुझे स्टम्प्ड किया गया था, लेकिन नीचे दिए गए लिंक पर जवाब मेरे लिए काम किया। त्रुटि हो गई है और उम्मीद के मुताबिक छवि प्रदर्शित होती है

उपरोक्त उत्तरों में से एक की तरह, आपके पास फ़ंक्शन से पहले (_ picker...भी लेकिन होना चाहिए @objc

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

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


2

इससे मेरी त्रुटि हल हो गई:

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

कृपया निम्नानुसार चरणों की जाँच करें:

  1. फ़ोटो आयात करें
  2. एल्बम तक पहुंच है:

    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. वर्तमान 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. मुख्य चरण, सुनिश्चित करें कि प्रतिनिधि विधि सख्ती से पालन करने जैसा है

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

यही मैंने किया और इसने मेरी समस्या को हल किया।

  • @objc जोड़ें
  • आंतरिक जोड़ें
  • छवि से पहले _ जोड़ें
  • सुनिश्चित करें कि आप कोई भी उपयोग कर रहे हैं और AnyObject नहीं

उम्मीद है की यह मदद करेगा!


हम्म, internalडिफ़ॉल्ट है; मुझे आश्चर्य है कि इसे निर्दिष्ट करने के लिए क्या फर्क पड़ता है ...
निकोलस मिआरी

2

मेरे मामले में मुझे यह त्रुटि मिल रही थी क्योंकि मैं पहली बार सत्यापित किए बिना एक छवि पिकर नियंत्रक पेश कर रहा था यदि उपयोगकर्ता ने छवियों तक पहुंच की अनुमति दी थी। मेरे कोड में कहीं और उपयोगकर्ता ने अनुमति दी थी, इसलिए मुझे लगता है कि मुझे जो कुछ भी करने की ज़रूरत थी वह फ़ोटो आयात करना था। हालाँकि, जब से उन्होंने छवि जोड़ने वाले नियंत्रक को मेरे लिए समस्या हल की है (आयात करने के साथ ही फ़ोटो) प्रस्तुत करने से पहले उन्होंने ऐप में उस बिंदु पर 'अनुमति' नहीं दी है।

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

        })
    }

यदि यह उत्तर मेरे क्षमा याचना को बेमानी लगता है, लेकिन मुझे अपने समाधान पर काम करने के लिए कुछ अलग-अलग जवाबों को एक साथ करना होगा। शायद यह स्विफ्ट 4 का उपयोग करने में किसी और की मदद करेगा।


2

इस कोड का उपयोग करें

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

2

यह "त्रुटि डोमेन = प्लगइनकिट कोड = 13" त्रुटि ने बहुत से लोगों को भ्रमित कर दिया है, भले ही यह एक हानिरहित सेब डिबग संदेश लगता है। मुझे अपने UI में सेट की गई छवि को प्राप्त करने में समस्या हो रही थी और मुझे लगा कि यह त्रुटि थी, लेकिन यह कुछ अधिक सूक्ष्म थी।

मेरे पास फाइल में मेरा इमेज पिकर कंट्रोलर है जो इसे प्रस्तुत करने वाले व्यू कंट्रोलर से अलग है।

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

अधिकांश ट्यूटोरियल और उत्तरों में शून्य पर पूरा सेट है। हालाँकि यदि आप पूरा करने के लिए प्रतिनिधि को सेट करते हैं और प्रतिनिधि के डिस्लेट विधि को अलग से कॉल करते हैं, तो विधि को कॉल किया जाता है, लेकिन छवि सेट नहीं होती है, इसलिए बर्खास्त होने का पूरा उपयोग करना सुनिश्चित करें।

और फिर, मुझे पता है कि यह उत्तर सीधे मूल प्रश्न से संबंधित नहीं हो सकता है, लेकिन मुझे लगता है कि बहुत सारे लोग इस मुद्दे के लिए यहां आ रहे हैं और दिए गए समाधान मदद नहीं कर रहे हैं। कारण यह है कि उत्तर देने वाले अधिकांश लोगों में उनकी छवि पिकर नियंत्रक के रूप में एक ही वर्ग में उनके मुख्य दृश्य नियंत्रक के रूप में होती है और इस तरह उन्हें पूर्णता का उपयोग करने की आवश्यकता नहीं होती है।


मुझे ठीक इसी की आवश्यकता थी। धन्यवाद!
एजे हर्नांडेज़

1

त्रुटि भी होता है जब आप फोटो लाइब्रेरी के उपयोग की अनुमति कॉन्फ़िगर नहीं किया है आप मेंInfo.plist फाइल ।

आपको एक स्ट्रिंगPrivacy - Photo Library Usage Description के Info.plistसाथ जोड़ना होगा होगा जो तब दिखाई देगा जब आपका ऐप उपयोगकर्ता के फोटो लाइब्रेरी तक पहुंचने का पहली बार प्रयास करता है।

अंतिम Info.plistसमायोजन कुछ इस तरह दिखना चाहिए: यहां छवि विवरण दर्ज करें


1

मेरे पास एक ही त्रुटि है और मैंने इसे इस तरह से तय किया है:

अलग-अलग तरीके से छवि वस्तु प्राप्त करना UIImagePickerController पर निर्भर करता है अनुमति देना सही या गलत है

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

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

    ....

}

और हां, उपरोक्त टिप्पणियों के रूप में पहले फोटो लाइब्रेरी तक पहुंचने की अनुमति पूछें।


1

मेरे अंतिम छोर पर UINavigationControllerDelegateप्रतिनिधि गायब है।

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate


0

मैं उसी समस्या को लेकर आया था। उपर्युक्त सुझावों में से किसी ने भी मेरे लिए काम नहीं किया। हालाँकि, मैंने इसे picker.dismiss कॉल करके और पोस्ट को ख़ारिज करते हुए इसे हल किया। मैं स्पष्ट नहीं हूं कि मैंने इस तरह से खारिज कॉल क्यों किया है, लेकिन यह मेरे लिए काम करता है।

   @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

मैंने इन सभी उत्तरों को पढ़ा और थोड़ा संशोधित किया और इसे खारिज करने की आवश्यकता नहीं हुई, इसने मेरे लिए काम किया, धन्यवाद अन्य जिन्होंने यहां उत्तर दिया है।

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

0

मुझे IMage PickerView का समाधान मिला .....

@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

फोटो लाइब्रेरी से इमेज लोड करने के लिए imageView पर क्लिक करें और उसी इमेजव्यू पर प्रीव्यू दिखाएं। तेजी से 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

स्विफ्ट 4.2 और Xcode 10.0 पर यही मुद्दा था । हालाँकि छवि पिकर सही तरीके से काम कर रहा था लेकिन Xcode ने कंसोल पर यह त्रुटि दिखाई। इससे छुटकारा पाने के लिए:

  • Xcode मेनू पर उत्पाद> योजना> संपादन योजना
  • 'रन' टैब चुनें, फिर 'तर्क'
  • 'पर्यावरण चर' अनुभाग में नाम OS_ACTIVITY_MODE और मान अक्षम के साथ एक चर जोड़ें

ठीक है ... वास्तव में ... मेरे लिए यह त्रुटि नहीं दिखाता है, लेकिन didFinishPickingMediaWithInfo पद्धति को नहीं कहा जाता है ... इसलिए मुझे यह त्रुटि देखने के लिए इस मान को सक्षम करने की आवश्यकता है
मोहम्मद ली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.