Импорт изображения из библиотеки фотографий в приложение в xcode - PullRequest
0 голосов
/ 22 мая 2019

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

В настоящее время я использую Xcode 10.2.1, и я понимаю, что в методы делегата были внесены некоторые изменения, и я их изменил. Он преуспевает в построении, но всякий раз, когда я нажимаю на одну конкретную вкладку, куда я хотел бы импортировать изображение, происходит сбой.

class UserImage: UIViewController,UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    var imagePickerController : UIImagePickerController!

    @IBOutlet var ImageView: UIImageView!

    @IBAction func Edit(_ sender: Any) {
        imagePickerController.delegate = self
        imagePickerController.sourceType = .photoLibrary

        present(imagePickerController, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
    {
        if let image = info[.originalImage] as? UIImage { 
            ImageView.image = image
        } else {
            print("Take another")
        }

        self.dismiss(animated: true, completion: nil)
    }

1 Ответ

2 голосов
/ 22 мая 2019

Это сбой, потому что вы никогда не инициализировали UIImagePickerController. Поскольку вы пометили imagePickerController как необязательное значение, ваше приложение будет аварийно завершать работу, когда вы попытаетесь сослаться на него, но оно все равно будет nil. Добавьте эту строку в начало вашей функции редактирования для инициализации переменной:

imagePickerController = UIImagePickerController()

Редактировать: В качестве альтернативы, как упоминал @rmaddy, вы можете просто сделать контроллер локальной переменной функции. В вашем примере нет необходимости делать его свойством класса. По сути, вы просто удалили бы объявление из верхней части вашего класса и вместо этого объявили бы его внутри функции:

let imagePickerController = UIImagePickerController()
...