Как передавать данные с одного контроллера просмотра на следующий, без использования раскадровки [дубликат]

У меня была аналогичная проблема. Я делал кошку файла, соединяя его в сортировку и затем передавая результат в «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 Иногда простой, неэлегантный - лучший способ пойти.

81
задан dfd 9 June 2017 в 21:44
поделиться

30 ответов

На моем конце отсутствует делегат UINavigationControllerDelegate.

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate

1
ответ дан Aleem 16 August 2018 в 03:51
поделиться

Я нашел его! Он пытается сказать вам, что у вас нет разрешения на «фотографии». Вам нужно включить #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.

15
ответ дан Anh Pham 16 August 2018 в 03:51
поделиться
  • 1
    обязательно включите #import & lt; Photos / Photos.h & gt; – Robert Wohnoutka 23 September 2017 в 06:16
  • 2
    Это не устранило мою проблему. – fi12 2 January 2018 в 18:53
  • 3
    Я получаю следующее сообщение в консоли «Чтение из частных эффективных пользовательских настроек». ошибки, возникающие при обнаружении расширений: Ошибка Домен = Код PlugInKit = 13 & quot; запрос отменен & quot; UserInfo = {NSLocalizedDescription = запрос отменен} & quot; , Это не решило проблему. – Biranchi 12 January 2018 в 07:29
  • 4
    Это тоже не решило проблему, пожалуйста, helpppp: (((( – Reza.Ab 27 January 2018 в 01:34

Если вы этого еще не сделали, попробуйте this .

Product> Scheme> Edit Scheme> Переменные среды OS_ACTIVITY_MODE: disable

Решает мою проблему.

13
ответ дан Changnam Hong 16 August 2018 в 03:51
поделиться
  • 1
    вы можете объяснить, почему это работает? – Rbar 17 July 2018 в 21:08
  • 2
    Это подавляет сообщения об ошибках, но не устраняет их причины. Он также подавляет другие системные сообщения и все, что угодно от 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 !!!

4
ответ дан Daniel Arantes Loverde 16 August 2018 в 03:51
поделиться
  • 1
    Чувак .... Ты спас меня ... Делегат = «Я» - это то, что мы забываем скопировать. – Ramandeep Singh Gosal 22 December 2017 в 07:02
  • 2
    Спасибо чувак! Не могли бы вы проголосовать! Еще раз спасибо! – Daniel Arantes Loverde 22 December 2017 в 11:14
  • 3
    Я сделал это в тот же день. – Ramandeep Singh Gosal 1 February 2018 в 10:35

Решение, которое сработало для меня, просто перешло в Product (в верхней части экрана) -> Scheme -> EditScheme -> Аргументы

В переменных среды добавьте OS_ACTIVITY_MODE со значением «disable «

Надеюсь, это сработает для кого-то еще!

Я приложу скриншот на всякий случай, когда мое описание показалось запутанным

-1
ответ дан danner.tech 16 August 2018 в 03:51
поделиться

Пробовал несколько комбинационных ответов без особого успеха.

Используя Swift 4, я обнаружил, что мне нужно убедиться, что были реализованы следующие два элемента, чтобы гарантировать, что изображение было выбрано и помещено в сборщик (обратите внимание, что ошибки [обнаружения], возникающие при обнаружении расширений :

Ошибка домена = Код подключаемого модуля = 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
    }
    ...
}
9
ответ дан Dmitry 16 August 2018 в 03:51
поделиться
  • 1
    Спасибо за любезную помощь: на самом деле – Muhammad Rizwan 10 March 2018 в 04:23

Это меня насторожило, но ответ по ссылке ниже работал на меня. Ошибка исчезла, и изображение отобразится как ожидалось

Как и в одном из ответов выше, перед функцией вы должны иметь (_ picker..., а также @objc.

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

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

2
ответ дан EGibson 16 August 2018 в 03:51
поделиться

Чтобы скрыть странные журналы из iOS

  1. открыть xcode
  2. cmd + shift + / для поиска в меню
  3. введите «схема редактирования»
  4. выберите его и введите
  5. нажмите «Аргументы»
  6. добавьте переменную env: имя OS_ACTIVITY_MODE, значение отключено
  7. закрыть
-1
ответ дан Frank Fang 16 August 2018 в 03:51
поделиться
  • 1
    В двух предыдущих ответах на этот вопрос есть это решение - почему вы их скопировали? – Ashley Mills 1 August 2018 в 18:12
  • 2
    @AshleyMills Затем не предоставили подробностей, например «cmd + shift + / для поиска в меню». – Frank Fang 3 August 2018 в 04:25
  • 3
    Вы должны шутить. – Ashley Mills 3 August 2018 в 08:52
  • 4
    @AshleyMills нет. Я новичок, настоящий новичок, мне требуется некоторое время, чтобы найти «Редактировать схему». :( – Frank Fang 7 August 2018 в 08:23

Это то, что я сделал, и он решил мою проблему.

  • Добавить @objc
  • добавить внутренний
  • добавить _ перед изображениемPicker
  • убедитесь, что вы используете Any, а не AnyObject

Надеемся, что это поможет!

1
ответ дан FreitDev 16 August 2018 в 03:51
поделиться

Это решило мою ошибку:

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 16 August 2018 в 03:51
поделиться

В моем случае я получал эту ошибку, потому что я представлял контроллер выбора изображения без предварительной проверки, разрешил ли пользователь доступ к изображениям. В другом месте моего кода пользователь предоставил разрешение, поэтому я думаю, что все, что мне нужно было сделать, это импортировать фотографии. Однако, поскольку они «не могут» предоставить разрешение на тот момент в приложении, добавив это непосредственно перед тем, как я представила контроллер выбора изображения, решила проблему для меня (импортируйте также фотографии).

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

        })
    }

Если этот ответ кажется излишним мои извинения, но мне пришлось собраться вместе с несколькими разными ответами, чтобы заставить мое решение работать. Возможно, это поможет кому-то другому использовать Swift 4.

2
ответ дан Jason Rybka 16 August 2018 в 03:51
поделиться

Ошибка также возникает, если вы не настроили разрешения на использование библиотеки фотографий в файле Info.plist.

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

Окончательные настройки Info.plist должны выглядеть примерно так:

1
ответ дан Knowledge 16 August 2018 в 03:51
поделиться

Это может быть не самый удобный ответ, но, надеюсь, это поможет! Я на 99% уверен, что это конкретное сообщение об ошибке на самом деле не указывает на реальную проблему. Я потратил несколько часов, вытаскивая свои волосы по этой же самой точной проблеме.

1) У меня была авторизация для печати фотографий на консоли, когда я запускал свой сборщик, 2) Я мог легко перемещаться и выбирать фотографию достаточно легко, и 3) когда я вернусь к своему представлению отбросив сборщик, изображение моей кнопки не было обновлено новой фотографией ... и единственным советом, который я имел к проблеме, было то же самое сообщение об ошибке, которое вы получаете.

Оказывается, я был жесткое кодирование изображения замещающего объекта в ViewWillAppear вместо ViewDidLoad. Каждый раз, когда сборщик увольнялся, он вызывал ViewWillAppear и заменял мое выбранное изображение жестким кодированным изображением. Я исправил эту проблему и, конечно же, все работает нормально ... и я все еще вижу это сообщение об ошибке каждый раз, когда я возвращаюсь из сборщика.

Я рекомендую искать где-то, кроме ImagePicker, для вашего проблема, и вы, скорее всего, найдете ее.

4
ответ дан Levi Lais 16 August 2018 в 03:51
поделиться

Я исправил эту проблему, вызвав функцию ниже в 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.")
        }
    }
8
ответ дан logan.Nguyen 16 August 2018 в 03:51
поделиться

У меня такая же ошибка, и я исправил ее следующим образом:

получить объект изображения по-разному зависит от 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
    }

    ....

}

И, конечно, , попросите разрешение на доступ к библиотеке фотографий сначала, как указано выше.

1
ответ дан melson.jao 16 August 2018 в 03:51
поделиться

Это устраняет проблему в Swift 4:

Измените код ниже

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

на следующее:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {}
3
ответ дан ndmeiri 16 August 2018 в 03:51
поделиться
  • 1
    Эти решения не работают для меня. Любые другие идеи, пожалуйста? – David DelMonte 30 August 2017 в 14:58
  • 2
    Не работает ... – user3427013 16 October 2017 в 12:56
  • 3
    Моя ошибка выглядела примерно так: ошибки, возникающие при обнаружении расширений: Ошибка домена = Код PlugInKit = 13 & quot; запрос отменен & quot; UserInfo = {NSLocalizedDescription = запрос отменен} И это решило мою проблему, хотя я не могу говорить, если это помогает OP. Благодаря :) – agrippa 5 May 2018 в 22:41

Обязательно добавьте 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)
}
21
ответ дан Nisse Engström 16 August 2018 в 03:51
поделиться

Я прочитал все эти ответы и немного изменил здесь и не нуждался в увольнении, это сработало для меня, спасибо другим, которые ответили здесь.

    @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
ответ дан Rakshitha Muranga Rodrigo 16 August 2018 в 03:51
поделиться

щелкните по изображению, чтобы загрузить изображение из библиотеки фотографий и показать предварительный просмотр на том же изображении. на скорости 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 16 August 2018 в 03:51
поделиться

Убедитесь, что вы подклассифицируете оба: 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)

Кредиты на этот источник .

3
ответ дан Ryan G 16 August 2018 в 03:51
поделиться

Я нашел это решение. Мы получили эту ошибку из-за этих двух причин, о которых говорится ниже.

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

Надеюсь, что это решение поможет вам устранить эту ошибку.

Если он работает для вас, не забудьте отметить его как правильное, так что это поможет другим найти правильный путь.

7
ответ дан Tom Aranda 16 August 2018 в 03:51
поделиться

я нашел решение 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
ответ дан Vega 16 August 2018 в 03:51
поделиться

Я столкнулся с той же проблемой. Ни одно из вышеупомянутых предложений не работало для меня. Тем не менее, я решил это, объяснив, вызывая 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
ответ дан Vyshakh 16 August 2018 в 03:51
поделиться

Пожалуйста, следуйте инструкциям следующим образом:

  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
ответ дан xuzepei 16 August 2018 в 03:51
поделиться
0
ответ дан Mario Vasile 6 September 2018 в 02:41
поделиться
21
ответ дан Nisse Engström 6 September 2018 в 02:41
поделиться
0
ответ дан Apfelsaft 29 October 2018 в 09:21
поделиться
2
ответ дан FRIDDAY 29 October 2018 в 09:21
поделиться
1
ответ дан jaskiratjd 29 October 2018 в 09:21
поделиться
0
ответ дан Marcos Reboucas 29 October 2018 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: