У меня была аналогичная проблема. Я делал кошку файла, соединяя его в сортировку и затем передавая результат в «while read var1 var2 var3». т.е.: cat $ FILE | sort -k3 | при чтении Count IP Name do Работа под «do» была оператором if, который идентифицировал изменение данных в поле $ Name и основан на изменении или без изменений составили суммы в $ Count или распечатали суммированную строку отчета. Я также столкнулся с проблемой, когда я не смог получить последнюю строку для печати в отчете. Я пошел с простой возможностью перенаправить cat / sort в новый файл, повторив новую строку для этого нового файла, и THEN запустил мое «пока прочитанное количество IP-адресов» в новом файле с успешными результатами. ie: cat $ FILE | sort -k3> NEWFILE echo "\n" >> NEWFILE cat NEWFILE | при чтении Count IP Name do Иногда простой, неэлегантный - лучший способ пойти.
На моем конце отсутствует делегат UINavigationControllerDelegate
.
class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
Я нашел его! Он пытается сказать вам, что у вас нет разрешения на «фотографии». Вам нужно включить #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.
Если вы этого еще не сделали, попробуйте this .
Product> Scheme> Edit Scheme> Переменные среды
OS_ACTIVITY_MODE: disable
Решает мою проблему.
NSLog
.
– John Montgomery
23 July 2018 в 20:57
* Отсутствует DELEGATE * в Swift 3 В моем случае все настройки были правильными: 1 - Делегаты (UIImagePickerControllerDelegate, UINavigationControllerDelegate); 2 - Разрешения уже проверены; 3 - Плист уже сделан; 4 - Все, что было прочитано в этом ответе, я сделал;
Но я забыл реализовать pickerview.delegate = self
на viewDidLoad
, потому что i COPY и PASTE из моего другого viewController и забыл это!
Я надеюсь, что это поможет кому-то, сначала просмотрите свою COPY / PASTE !!!
Решение, которое сработало для меня, просто перешло в Product (в верхней части экрана) -> Scheme -> EditScheme -> Аргументы
В переменных среды добавьте OS_ACTIVITY_MODE со значением «disable «
Надеюсь, это сработает для кого-то еще!
Я приложу скриншот на всякий случай, когда мое описание показалось запутанным
Пробовал несколько комбинационных ответов без особого успеха.
Используя Swift 4, я обнаружил, что мне нужно убедиться, что были реализованы следующие два элемента, чтобы гарантировать, что изображение было выбрано и помещено в сборщик (обратите внимание, что ошибки [обнаружения], возникающие при обнаружении расширений :
Ошибка домена = Код подключаемого модуля = 13 «запрос отменен» UserInfo = {NSLocalizedDescription = запрос отменен} «
blockquote>сообщение по-прежнему отображается в консоли, но это не мешает вам добавлять изображение). Может быть, это сообщение, которое приводит к увольнению сборщика?
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 } ... }
Это меня насторожило, но ответ по ссылке ниже работал на меня. Ошибка исчезла, и изображение отобразится как ожидалось
Как и в одном из ответов выше, перед функцией вы должны иметь (_ picker...
, а также @objc
.
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
...
}
Чтобы скрыть странные журналы из iOS
Это то, что я сделал, и он решил мою проблему.
Надеемся, что это поможет!
Это решило мою ошибку:
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)
}
В моем случае я получал эту ошибку, потому что я представлял контроллер выбора изображения без предварительной проверки, разрешил ли пользователь доступ к изображениям. В другом месте моего кода пользователь предоставил разрешение, поэтому я думаю, что все, что мне нужно было сделать, это импортировать фотографии. Однако, поскольку они «не могут» предоставить разрешение на тот момент в приложении, добавив это непосредственно перед тем, как я представила контроллер выбора изображения, решила проблему для меня (импортируйте также фотографии).
// request photos permission if permission has not been granted
if PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.authorized {
PHPhotoLibrary.requestAuthorization({ (status: PHAuthorizationStatus) in
})
}
Если этот ответ кажется излишним мои извинения, но мне пришлось собраться вместе с несколькими разными ответами, чтобы заставить мое решение работать. Возможно, это поможет кому-то другому использовать Swift 4.
Ошибка также возникает, если вы не настроили разрешения на использование библиотеки фотографий в файле Info.plist
.
Вам нужно добавить Privacy - Photo Library Usage Description
в Info.plist
с помощью кнопки String , который появится, когда ваше приложение впервые попытается получить доступ к Библиотеке фотографий пользователя.
Окончательные настройки Info.plist
должны выглядеть примерно так:
Это может быть не самый удобный ответ, но, надеюсь, это поможет! Я на 99% уверен, что это конкретное сообщение об ошибке на самом деле не указывает на реальную проблему. Я потратил несколько часов, вытаскивая свои волосы по этой же самой точной проблеме.
1) У меня была авторизация для печати фотографий на консоли, когда я запускал свой сборщик, 2) Я мог легко перемещаться и выбирать фотографию достаточно легко, и 3) когда я вернусь к своему представлению отбросив сборщик, изображение моей кнопки не было обновлено новой фотографией ... и единственным советом, который я имел к проблеме, было то же самое сообщение об ошибке, которое вы получаете.
Оказывается, я был жесткое кодирование изображения замещающего объекта в ViewWillAppear вместо ViewDidLoad. Каждый раз, когда сборщик увольнялся, он вызывал ViewWillAppear и заменял мое выбранное изображение жестким кодированным изображением. Я исправил эту проблему и, конечно же, все работает нормально ... и я все еще вижу это сообщение об ошибке каждый раз, когда я возвращаюсь из сборщика.
Я рекомендую искать где-то, кроме ImagePicker, для вашего проблема, и вы, скорее всего, найдете ее.
Я исправил эту проблему, вызвав функцию ниже в 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.")
}
}
У меня такая же ошибка, и я исправил ее следующим образом:
получить объект изображения по-разному зависит от UIImagePickerController allowEditing true или false
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if isImagePickerAllowEditing {
sourceImage = info[UIImagePickerControllerEditedImage] as? UIImage
} else {
sourceImage = info[UIImagePickerControllerOriginalImage] as? UIImage
}
....
}
И, конечно, , попросите разрешение на доступ к библиотеке фотографий сначала, как указано выше.
Это устраняет проблему в Swift 4:
Измените код ниже
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {}
на следующее:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {}
Обязательно добавьте 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)
}
Я прочитал все эти ответы и немного изменил здесь и не нуждался в увольнении, это сработало для меня, спасибо другим, которые ответили здесь.
@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
}
}
щелкните по изображению, чтобы загрузить изображение из библиотеки фотографий и показать предварительный просмотр на том же изображении. на скорости 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)
}
Убедитесь, что вы подклассифицируете оба: 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)
Кредиты на этот источник .
Я нашел это решение. Мы получили эту ошибку из-за этих двух причин, о которых говорится ниже.
Код авторизации
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.")
}
}
didFinishPickingMediaWithInfo
Неверно:
private func imagePickerController( picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
}
Вправо
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
}
Надеюсь, что это решение поможет вам устранить эту ошибку.
Если он работает для вас, не забудьте отметить его как правильное, так что это поможет другим найти правильный путь.
я нашел решение 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)
}
Я столкнулся с той же проблемой. Ни одно из вышеупомянутых предложений не работало для меня. Тем не менее, я решил это, объяснив, вызывая 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!)
}
}
Пожалуйста, следуйте инструкциям следующим образом:
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)
})
}
}
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)
}
}
// 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)
}