Поток 1. Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения. Получение изображения из галереи swift - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь получить изображение из галереи с помощью кнопки, но получаю эту ошибку:

Тема 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения.

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

class ViewController: UIViewController, VNDocumentCameraViewControllerDelegate,  UINavigationControllerDelegate, UIImagePickerControllerDelegate  {

    var textRecognitionRequest = VNRecognizeTextRequest()
    var recognizedText = ""
    var text2 = "";

    @IBOutlet weak var imageTest: UIImageView!
    @IBOutlet weak var centreView: CardView!
    @IBOutlet weak var centreViewBorder: UIView!
    @IBOutlet weak var circleButton: UIButton!



    override func viewDidLoad() {
        super.viewDidLoad()
        imageTest = UIImageView()
```

```
IBAction func uploadImage(_ sender: UIButton) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .photoLibrary
        self.present(imagePicker, animated: true, completion: nil)

    }
   func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        guard let image = info[.originalImage] as? UIImage else {
            fatalError("Error")
        }
        imageTest!.image = image
    dismiss(animated: true, completion: nil)

    }
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)
}


1 Ответ

1 голос
/ 07 апреля 2020

Первая проблема - вы переключаете переменную imageTest на другой экземпляр UIImageView. Помните, когда вы объявляете IBOutlet и используете! указатель памяти вашей переменной ссылается на нулевое значение в памяти. Вам больше не нужно назначать его снова. Кроме того, при ссылке в будущем его больше не нужно будет разворачивать, потому что! в объявлении делает развертывание силы явным.

override func viewDidLoad() {
        super.viewDidLoad()
        imageTest = UIImageView()  -- ***** Remove this line *****

Кроме того, это необходимо изменить

   func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        guard let image = info[.originalImage] as? UIImage else {
            fatalError("Error")
        }
        imageTest!.image = image -- ******* REMOVE THE BANG HERE ******
    dismiss(animated: true, completion: nil)

    }
...