Как показать значок на экране в приложении Swift? - PullRequest
0 голосов
/ 25 мая 2018

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

Приложение получает эту информацию из JSON (часть запроса JSON):

"current": {
    "condition": {
        "text": "Sunny",
        "icon": "//cdn.apixu.com/weather/64x64/day/113.png",
        "code": 1000
    },
    "wind_mph": 4.3,
    "wind_kph": 6.8,

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

@IBOutlet weak var imageView: UIImageView!
var image = UIImage()

Код с присвоением глобальным переменным находится в главном потоке.

DispatchQueue.main.sync {
    if errorHasOccured {
        self?.cityLabel.text = "Uncnown city"
        self?.temperatureLabel.text = ""
    } else {
        self?.cityLabel.text = locationName
        self?.temperatureLabel.text = "\(temperature!)"
        self?.imageView.image = image
    }

}

Как это сделать правильно?

Полный код: https://pastebin.com/jbzgQyPN

1 Ответ

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

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

        let downloadPicTask = session.dataTask(with: iconURL!) { (data, response, error) in
            // The download has finished.
            if let e = error {
                print("Error downloading cat picture: \(e)")
                print(2)
            } else {
                print(3)
                // No errors found.
                // It would be weird if we didn't have a response, so check for that too.
                if let res = response as? HTTPURLResponse {
                    print("Downloaded cat picture with response code \(res.statusCode)")
                    if let imageData = data {
                        // Finally convert that Data into an image and do what you wish with it.
                        image = UIImage(data: imageData)!
                       /// ****You have to set the image here***
                        self?.imageView.image = image

                        print(3)
                        // Do something with your image.
                    } else {
                        print("Couldn't get image: Image is nil")
                    }
                } else {
                    print("Couldn't get response code for some reason")
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...