Я пытаюсь отобразить изображение из библиотеки фотографий в UIImageView
Полная ошибка:
2017-06-09 21: 55: 59.063307 + 0200 firstapp2.0 [12873: 1120778] Ошибка обнаружения PhotoPicker: домен ошибки = PlugInKit Code = 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)
}
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
значения словаря приводятся как id в obj-c. Я также реализовал запрос на авторизацию и обработку для доступа к библиотеке фотографий пользователя: сообщение об ошибке все еще появляется. Я добавил в файл info.plist запись о конфиденциальности для использования библиотеки фотографий пользователя.Ответы:
Вам нужно сделать явную ссылку на Objective-C:
@objc
источник
dismiss
.extension [your class name]
блок вне класса.Я нашел это решение. Мы получили эту ошибку из-за этих двух причин, упомянутых ниже.
Код авторизации
didFinishPickingMediaWithInfo
Неправильно:
Правильно
Надеюсь, это решение поможет вам устранить эту ошибку.
Если это сработает, не забудьте пометить его как правильный, это поможет другим найти правильный путь.
источник
picker.dismiss(animated: true, completion: nil)
Я нашел это! Он пытается сказать вам, что у вас нет авторизации для "фотографий". Вам нужно включить
#import <Photos/Photos.h>
и запросить авторизацию, например, как это в Objective-C.Надеюсь, это сэкономит вам время. Я потратил на отладку два полных дня!
Я уверен, что кто-нибудь подскажет, как сделать то же самое в Swift.
источник
Пробовали несколько комбинационных ответов без особого успеха.
Используя Swift 4, я обнаружил, что мне нужно убедиться, что были реализованы следующие два элемента, чтобы изображение было выбрано и помещено в средство выбора (обратите внимание, что при обнаружении расширений возникли ошибки «[обнаружение]:
сообщение по-прежнему отображается в консоли, но это не мешает вам добавить изображение). Может быть, это сообщение приводит к закрытию сборщика?
1) Делегат для
UIImagePickerController
is(UIImagePickerControllerDelegate & UINavigationControllerDelegate)?
поэтому должен явно добавить вUINavigationControllerDelegate
качестве одного из протоколов:2) Убедитесь, что в info.plist заданы
Privacy - Photo library Usage Description
ключ и значение String.Конечно, вам нужно убедиться, что вы создали
UIImagePickerController
и установили его делегат равнымself
inViewDidLoad()
:источник
Я исправил эту проблему, вызовите функцию ниже в viewdidload, viewWillAppear или viewDidAppear, чтобы проверить разрешение для вашего приложения.
И чтобы использовать описанный выше метод, не забудьте добавить
import Photos
в начало класса.источник
XCODE 10.1 / SWIFT 4.2:
Добавить необходимые разрешения (другие упоминаются)
Реализуйте эту функцию делегата:
источник
* Отсутствует DELEGATE * в Swift 3
В моем случае все настройки были правильными:
1 - Делегаты (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - Разрешения уже проверены;
3 - Plist уже готов;
4 - Я прочитал все, что читал в ответах;
Но я забыл реализовать
pickerview.delegate = self
наviewDidLoad
Потому что я копировать и вставлять из другого ViewController и забыть , что!Надеюсь, это кому-нибудь поможет, сначала просмотрите свою КОПИЮ / ВСТАВКУ !!!
источник
Возможно, это не самый полезный ответ, но, надеюсь, он поможет! Я на 99% уверен, что это конкретное сообщение об ошибке на самом деле не указывает вам на настоящую проблему. Я часами выдергивал волосы из-за той же самой проблемы.
1) у меня было разрешение на печать фотографий на консоли, когда я запускал средство выбора, 2) я мог достаточно легко перемещаться и выбирать фотографию, и 3) когда я возвращался в свое представление после закрытия средства выбора, мое изображение кнопки не был обновлен с новой фотографией ... и единственный намек на проблему, который у меня был, был точно такое же сообщение об ошибке, которое вы получаете.
Оказывается, я жестко кодировал изображение-заполнитель во ViewWillAppear вместо ViewDidLoad. Каждый раз, когда средство выбора отклонялось, оно вызывало ViewWillAppear и заменяло выбранное мной изображение на мое жестко закодированное изображение. Я исправил эту проблему и, конечно же, теперь все работает нормально ... и я все еще вижу это сообщение об ошибке каждый раз, когда возвращаюсь из средства выбора.
Я рекомендую поискать решение вашей проблемы где-нибудь, кроме ImagePicker, и вы наверняка ее найдете.
источник
Если вы этого не сделали, попробуйте это .
Это решает мою проблему.
источник
NSLog
.Это устраняет проблему в Swift 4:
Измените код ниже
к этому:
источник
Я получил то же сообщение, когда пытался представить другой контроллер из обратного вызова средства выбора
imagePickerController
. Решение, которое сработало для меня, заключалось в том, чтобы переместить мой код внутрь обратного вызова завершения из метода отклонения сборщикаисточник
Убедитесь , что вы подклассы как:
UIImagePickerControllerDelegate, UINavigationControllerDelegate
.Также не забудьте установить делегата:
Кредиты этому источнику .
источник
На поиск решения этой проблемы у меня ушла вечность. Похоже, проблема в том, что функция imagePickerController из UIImagePickerControllerDelegate не может быть найдена. Если вы правильно настроили делегат и он перестал работать после обновления до Swift 4, проблема, вероятно, в том, что вы не сделали его доступным для Objective-C с помощью @objc, который требуется со времен Swift 4.
Должно быть:
вместо того
источник
Objective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
extension
блок?Исправлено установкой задержки в 1 секунду при установке изображения.
источник
Обязательно добавьте
internal func
в начале, а затем добавьте строчные буквы после скобок (_ picker: UIImagePickerController…
а затем измените сAnyObject
наAny
]…Проверьте код ниже:
источник
Это поставило меня в тупик, но ответ по ссылке ниже сработал для меня. Ошибка исчезла, и изображение отображается должным образом
Как и в случае с одним из приведенных выше ответов, вы должны иметь,
(_ picker...
но также@objc
до функции.https://forums.developer.apple.com/thread/82105
источник
Это решило мою ошибку:
источник
Пожалуйста, проверьте следующие шаги:
Имеет доступ к альбому:
Присутствует UIImagePickerController
Ключевой шаг - убедиться, что метод делегата строго соблюдается
источник
Это то, что я сделал, и это решило мою проблему.
Надеюсь это поможет!
источник
internal
это по умолчанию; Интересно, какая разница, чтобы указать это ...В моем случае я получал эту ошибку, потому что представлял контроллер средства выбора изображений без предварительной проверки, разрешил ли пользователь доступ к изображениям. В другом месте моего кода пользователь предоставил разрешение, поэтому я думаю, все, что мне нужно было сделать, это импортировать фотографии. Однако, поскольку они «могли» не предоставить разрешение в этот момент в приложении, добавив это непосредственно перед тем, как я представил контроллер выбора изображений, проблема была решена для меня (также импорт фотографий).
Если этот ответ кажется излишним, приношу свои извинения, но мне пришлось собрать воедино несколько разных ответов, чтобы мое решение заработало. Возможно, это поможет кому-то другому, использующему Swift 4.
источник
используйте этот код
источник
Эта ошибка «Error Domain = PlugInKit Code = 13» сбила с толку многих людей, хотя кажется, что это безобидное отладочное сообщение Apple. У меня возникли проблемы с получением изображения, которое я выбрал для установки в своем пользовательском интерфейсе, и я подумал, что проблема была в этой ошибке, но это было нечто более тонкое.
У меня есть контроллер средства выбора изображений в файле отдельно от контроллера представления, который его представляет.
MyViewController.swift
ImagePicker.swift
В большинстве руководств и ответов завершение установлено на ноль. Однако, если вы устанавливаете завершение на nil и вызываете метод делегата didSelect отдельно, метод вызывается, но изображение не устанавливается, поэтому обязательно используйте завершение dismiss '.
И снова я знаю, что этот ответ может не иметь прямого отношения к исходному вопросу, но я чувствую, что многие люди приходят сюда по этой проблеме, и данные решения не помогают. Причина в том, что большинство людей, дающих ответы, имеют свой контроллер выбора изображений в том же классе, что и их главный контроллер представления, и, следовательно, не нуждаются в завершении.
источник
Ошибка также возникает, если вы не настроили разрешения на использование библиотеки фотографий в себе.
Info.plist
файле.Вам нужно добавить
Privacy - Photo Library Usage Description
вInfo.plist
с строкой , который будет отображаться , когда ваш App пытается в первый раз , чтобы получить доступ к библиотеке фотографий пользователя.Окончательные
Info.plist
настройки должны выглядеть примерно так:источник
У меня такая же ошибка, и я исправил ее следующим образом:
получить объект изображения по-разному зависит от UIImagePickerController allowEditing истинно или ложно
И, конечно же, сначала попросите разрешения на доступ к библиотеке фотографий, как указано выше.
источник
С моей стороны
UINavigationControllerDelegate
отсутствует делегат.class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
источник
В моем случае управление памятью быстрого распределения кажется оптимизированным и исправленным командой Apple. Мой код отлично работал до быстрого обновления, и я обнаружил, что моя «ошибка» заключалась в том, что я не сохранял средство выбора, но он работал целую вечность без сохранения, так что здесь полное готовое к работе решение.
И
источник
Я столкнулся с той же проблемой. Ни одно из вышеупомянутых предложений не помогло мне. Однако я решил это, явно вызвав picker.dismiss и отклонив сообщение об этом. Я не понимаю, почему я так делал призывы увольнять, но у меня это сработало.
источник
Я прочитал все эти ответы и немного изменил здесь, и не нужно было увольнять, это сработало для меня, спасибо другим, кто ответил здесь.
источник
я нашел решение IMage PickerView .....
источник
щелкните изображение, чтобы загрузить изображение из библиотеки фотографий и просмотреть его в том же окне просмотра. на Swift 4
источник