Помилка виявлення PhotoPicker: домен помилки = код PlugInKit = 13


118

Я намагаюся відобразити зображення з бібліотеки фотографій у UIImageView

Повна помилка:

2017-06-09 21: 55: 59.063307 + 0200 firstapp2.0 [12873: 1120778] Помилка виявлення PhotoPicker: помилка домену = код PlugInKit = 13 "запит скасовано" UserInfo = {NSLocalizedDescription = Запит скасований}

Мій код включений нижче:

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 Beta 4 раптово дав мені цю помилку. Так дивно.
user2153553

2
Я отримую ту ж помилку, і моя реалізація знаходиться в obj-c. Це повідомлення про помилку не може бути пов’язане з кастингом типів словника інформації, повернутого методом делегата UIImagePicker в target-c: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)infoзначення словника відзначаються як id в obj-c. Я також реалізував запит на авторизацію та обробку для доступу до бібліотеки фотографій користувача: все одно отримую повідомлення про помилку. Я додав у файл info.plist запис про конфіденційність для користування бібліотекою фотографій користувача.
valeCocoa

2
Я отримую поточну помилку, однак це не заважає мені отримати зображення з бібліотеки та використовувати його пізніше ..
shokuroff

3
Я спробував усі пропозиції у всіх відповідях разом, безрезультатно.
Nicolas Miari

Відповіді:


39

Вам потрібно зробити чітку посилання на Objective-C: @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
Працює для мене. Нещодавно я оновив Swift 4 та Xcode 9, і це вирішило.
користувач3144836

3
Працює для мене. Необхідно після переходу на Swift 4.0.
mayankk2308

4
Не працює. Ця помилка сталася після того, як я зателефонував dismiss.
Кімі Чіу

Дивно. Це працювало для мене, однак xcode позначає це як попередження і очікує підпису: `Метод екземпляра 'imagePickerController ( : didFinishPickingMediaWithInfo :)' майже відповідає необов’язковій вимозі 'imagePickerController ( : didFinishPickingMediaWithInfo :)' протоколу 'UIImagePickerController' Делегат ' : didFinishPickingMediaWithInfo :) "приватне, щоб замовкнути це попередження`
Темний замок

@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>та подати запит на авторизацію, наприклад, подібний до цього в Objective-C.

Сподіваюсь, це заощадить певний час. Я витратив два цілих дні налагодження цього!

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

Я впевнений, що хтось може сказати вам, як це зробити у Swift.


1
не забудьте включити #import <Photos / Photos.h>
Роберт Вохнутка

6
Це не вирішило моєї проблеми.
fi12

1
Я отримую нижче повідомлення в консолі "Читання з приватних ефективних налаштувань користувача. Помилки, що виникають під час виявлення розширень: Домен помилок = Код PlugInKit = 13" запит скасований "UserInfo = {NSLocalizedDescription = Запит скасований}". Це не вирішило питання.
Біранчі

15

Спробував кілька комбінованих відповідей без особливого успіху.

Використовуючи Swift 4, я виявив, що мені потрібно переконатися, що наступні два елементи були реалізовані, щоб переконатися, що зображення було обрано та розміщене в вибирачі (зауважте, що "[виявлення] помилки, що виникають під час виявлення розширень:

Помилка помилки = Код PlugInKit = 13 "запит скасований" UserInfo = {NSLocalizedDescription = Запит скасований} "

повідомлення все ще відображається в консолі, але це не заважає вам додавати зображення). Можливо, це повідомлення, в результаті якого виборця не буде випущено?

1) Делегат для UIImagePickerControllerце (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?так потрібно явно додати в UINavigationControllerDelegateякості одного з протоколів:

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

2) Переконайтеся, що в info.plist встановлено Privacy - Photo library Usage Descriptionключ та значення String.

Звичайно, ви повинні переконатися , що ви створюєте UIImagePickerControllerі встановити його делегат , рівний selfв ViewDidLoad():

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

4
у мене все це є в моєму проекті .. все одно це не працює
Мохамед Лі

Дякую, я пропустив делегата налаштування в viewDidLoad ()
Аршад Шаїк

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 на Swift 4x
Самет Сазак

10

* Відсутній DELEGATE * у Swift 3

У моєму випадку всі налаштування були правильними:
1 - Делегати (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - дозволи вже перевірені;
3 - Plist вже зроблено;
4 - Все, що читалося в цій відповіді, я робив;

Але я забув реалізувати pickerview.delegate = selfна viewDidLoad тому, що я КОПУЮЙТЕ і ВКЛЮЧИТИ з мого іншого viewController і забув це!

Я сподіваюся, що це допоможе комусь, перегляньте свою КОПІЮ / ПАСТУ в першу чергу !!!


Дякую, я борюся довгі години, і я пропустив "UINavigationControllerDelegate", ти врятував нарешті, спасибі
Sakthimuthiah

Радий допомогти :)
Даніель Арантес Ловерде

8

Це може бути не найбільш корисною відповіддю - але, сподіваємось, це допоможе! Я на 99% впевнений, що саме це повідомлення про помилку насправді не вказує на справжню проблему. Я витратив години на витягування волосся над цим самим точним питанням.

1) Я мав дозвіл на друк фотографій на консолі, коли запускав вибральник; 2) міг легко орієнтуватися та вибирати фотографію, і 3) коли повертав би мене на вигляд після відхилення вибору, мій образ кнопки не було оновлено новою фотографією ... і єдиний натяк, який я мав на цю проблему, був саме тим самим повідомленням про помилку, яке ви отримуєте.

Виявляється, мені було важко кодувати зображення заповнювача в ViewWillAppear замість ViewDidLoad. Кожен раз, коли вибирач відмовлявся, він телефонував ViewWillAppear і замінював вибране зображення моїм жорстким кодованим зображенням. Я вирішив цю проблему і досить впевнено - зараз все працює нормально ... і я все ще бачу це повідомлення про помилку щоразу, коли повертаюся з вибору.

Я рекомендую шукати десь іншу, ніж ImagePicker, для своєї проблеми, і ви, швидше за все, її знайдете.


7

Якщо ви цього не зробили, спробуйте це .

Продукт> Схема> Редагувати схему> Змінні середовища OS_ACTIVITY_MODE: disable

Це вирішує моє питання.


23
Це пригнічує повідомлення про помилки, але не вирішує їх причину. Він також пригнічує інші системні повідомлення та що-небудь із цього NSLog.
Джон Монтгомері

6
Це не "вирішує" питання, а робить його невидимим. Дуже погана практика.
Зеешан

Це еквівалент приховування бруду під килимом tbh
шив

7

Це вирішує проблему в Swift 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]){}

Моя помилка виглядала приблизно так: помилки, що виникають під час виявлення розширень: домен помилок = код PlugInKit = 13 "запит скасований" UserInfo = {NSLocalizedDescription = запит скасований}. І це вирішило мою проблему, хоча я не можу говорити, якщо це допомагає ОП . Дякую :)
agrippa

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

Чудова відповідь, ти врятував мій час 👍🏼
Coder ACJHP

Працювали чудово! Подумайте, що це правильний спосіб вирішити помилки вибору в Swift 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 = Я - була моєю справою! Дякую.
Олексій Чеканов

4

Пошук виправлення цієї проблеми зайняв мене назавжди. Схоже, проблема полягає в тому, що функцію imagePickerController UIImagePickerControllerDelegate неможливо знайти. Якщо ви правильно встановили делегата, і він перестав працювати після оновлення до Swift 4, проблема, ймовірно, ви не зробили його доступним для Objective-C, використовуючи @objc, який необхідний з Swift 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
  • додати внутрішній
  • додати _ перед imagePicker
  • переконайтеся, що ви використовуєте Any, а не AnyObject

Сподіваюся, це допомагає!


Хм, internalза замовчуванням; Цікаво, яка різниця має це конкретизувати ...
Ніколас Міарі

2

У моєму випадку я отримував цю помилку, оскільки я представляв контролер вибору зображення, не попередньо перевіряючи, чи дозволив користувач доступ до зображень. Інакше в моєму коді користувач надав дозвіл, тому я думаю, що все, що мені потрібно було, це імпортувати фотографії. Однак, оскільки вони "можуть" не надати дозвіл на той момент у додатку, додавши це безпосередньо перед тим, як я представив контролер вибору зображень, вирішив проблему для мене (імпортувати також фотографії).

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

        })
    }

Якщо ця відповідь здасться зайвою, мої вибачення, але мені довелося зібратись із кількох різних відповідей, щоб моє рішення працювало. Можливо, це допоможе комусь, хто користується Swift 4.


2

використовувати цей код

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

2

Ця помилка "Domain Domain = PlugInKit Code = 13" збила з пантелику багатьох людей, навіть немовби це було нешкідливим повідомленням про налагодження яблук. У мене виникли проблеми з отриманням зображення, яке я вибрав для встановлення у своєму інтерфейсі, і подумав, що ця помилка була проблемою, проте це було дещо більш тонке.

У мене є контролер вибору зображень у файлі, окремому від контролера перегляду, який його представляє.

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

Більшість навчальних посібників та відповідей мають завершити нуль. Однак якщо встановити завершення на нуль і викликати метод didSelect делегата окремо, метод викликається, але зображення не встановлюється, тому обов'язково використовуйте завершення відхилення.

І знову: я знаю, що ця відповідь не може бути безпосередньо пов’язана з початковим питанням, але я маю відчуття, що багато людей приходять сюди з цього питання, і дане рішення не допомагає. Причина полягає в тому, що більшість людей, які дають відповіді, мають контролер вибору зображень того ж класу, що і основний контролер перегляду, і тому не потрібно використовувати завершення.


Це саме те, що мені було потрібно. Дякую!
AJ Ернандес

1

Помилка трапляється і тоді, коли ви не налаштували дозволи на використання бібліотеки фотографій у васInfo.plist файлі.

Вам потрібно додати Privacy - Photo Library Usage Descriptionв Info.plistс String , який буде відображатися , коли ваш App намагається в перший раз , щоб отримати доступ до бібліотеки фотографій користувача.

Остаточні 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

Я зіткнувся з тією ж проблемою. Жодна з вищезгаданих пропозицій не працювала для мене. Однак я вирішив це, подзвонивши на виборця. Відхиливши та звільнивши посаду. Мені не зрозуміло, чому я роблю такі відхилення дзвінків, але це працювало на мене.

   @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

Був цей самий випуск на Swift 4.2 та Xcode 10.0 . Хоча інструмент вибору зображення працював правильно, Xcode показав цю помилку на консолі. Щоб позбутися цього:

  • У меню Xcode Продукт> Схема> Редагувати схему
  • Виберіть вкладку "Виконати", а потім "Аргументи"
  • У розділі "Змінні середовища" додайте змінну з ім'ям OS_ACTIVITY_MODE та Значенням відключено

Ну ... не дуже ... для мене вона показує цю помилку, але метод didFinishPickingMediaWithInfo не називається ... тому мені потрібно було включити це значення, щоб побачити цю помилку
Мохамед Лі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.