Переменная показывает ноль после проверки на ноль при загрузке изображения - PullRequest
0 голосов
/ 08 мая 2018

Потерпи меня, пока я это объясняю,

Я создаю чат, в котором пользователи могут загружать фотографии, чтобы их могли видеть другие. Когда пользователь нажимает на иконку, он может загрузить фотографию в мою базу данных Firebase (это происходит успешно, и я уже проверил это). URL-адрес фотографии передается в базу данных сообщений и загружается в созданное мной табличное представление (я знаю, что URL-адрес фотографии существует из-за операторов печати и проверки базы данных). Тем не менее, когда я иду, чтобы загрузить фотографию с URL, приложение вылетает, говоря, что оно нашло ноль при развертывании моего необязательного (imageData) - это происходит внутри оператора if, который я должен выполнять только после проверки, что imageData не ноль , У меня также есть оператор print перед этим оператором if, который подтверждает, что данные не равны нулю. Почему он находит ноль при распаковке данных? Заранее спасибо за помощь.

let notificationCell = tableView.dequeueReusableCell(withIdentifier: "messageImageCell", for: indexPath) as! MessageCellForPhotos

        notificationCell.clipsToBounds = true
        let newPhotoURL = NSURL(string: messagesArray[indexPath.row].userSentImage)! as URL

        print("\(newPhotoURL) Hello World This Time")

        DispatchQueue.global().async {
            let imageData = try? Data(contentsOf: newPhotoURL) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
            DispatchQueue.main.async {

                print(imageData)

                if imageData != nil {
                    notificationCell.sentImageView.image = UIImage(data: imageData!)
                }

            }
        }

        return notificationCell

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

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

Kingfisher

0 голосов
/ 10 мая 2018

После изучения проблемы я обнаружил проблему. Когда я создал свою ячейку уведомлений (используя файл xib), я связал uiimageview с контроллером представления для ячейки. Тем не менее, каким-то образом представление изображения стало несвязанным с ячейкой. Поэтому, когда программа отправляла загрузку изображения в представление изображения, она находила ноль для вида изображения, а не находила ноль для самого изображения (то есть вид изображения, по-видимому, не существовал). Это была такая глупая проблема. Спасибо за помощь в расследовании. Приветствия.

0 голосов
/ 08 мая 2018

Не используйте принудительную перенос в вашем коде, не используйте! это вызывает много сбоев

использование if let or guard

так newPhotoURL

 guard let newPhotoURL =  NSURL(string: messagesArray[indexPath.row].userSentImage) as? URL else {return}

и imageData

if let imageData = try? Data(contentsOf: newPhotoURL) , let image = UIImage(data: imageData)  {
        notificationCell.sentImageView.image = image
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...