2016-05-14 4 views
1

Я только начинаю узнавать, как делать сетевые запросы в iOS Swift. Ниже представлен очень простой запрос изображения, где все, кажется, работает. Задача загружает изображение без ошибок, но ImageView никогда не отображает загруженное изображение. Любая помощь будет принята с благодарностью.Загруженное изображение не отображается iOS Swift

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var imageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let imageURL = NSURL(string: "https://en.wikipedia.org/wiki/Baseball#/media/File:Angels_Stadium.JPG")! 

     let task = NSURLSession.sharedSession().dataTaskWithURL(imageURL) { (data, response, error) in 
      if error == nil { 
       let downloadedImage = UIImage(data: data!) 
       performUIUpdatesOnMain { 
        self.imageView.image = downloadedImage 
       } 
      } 
     } 
     task.resume() 
    } 
} 
+1

Какова ваша функция для переключения на главный, показать, что код, называется ли линия настройки изображения? – Wain

+0

Является ли это специфическим для скачивания? Что произойдет, если вы просто установите изображение из своего пакета в тело 'viewDidLoad'? Вы должны предоставить более подробную информацию или, по крайней мере, рассказать, что вы пробовали. –

ответ

3

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

https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Angels_Stadium.JPG/1920px-Angels_Stadium.JPG

Обновить код код, как приведенный выше код и все должно быть нормально работать:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let imageURL = NSURL(string: "https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Angels_Stadium.JPG/1920px-Angels_Stadium.JPG")! 

    let task = NSURLSession.sharedSession().dataTaskWithURL(imageURL) { (data, response, error) in 

     guard error == nil, let data = data else { return } 

     let downloadedImage = UIImage(data: data) 
     dispatch_async(dispatch_get_main_queue()) { 
      self.imageView.image = downloadedImage 
     } 
    } 
    task.resume() 
} 

Надеюсь, это поможет вам.

+0

Хороший бит детективной работы! Я не думал проверять URL-адрес, указанный в коде, но вы правы. (Проголосовал) –

+0

@DuncanC Я проверил, потому что все хорошо в коде, за исключением факта URL-адреса, спасибо :) –

+0

«Я проверил, потому что все хорошо в коде ...» Что это значит? Если вам нужна помощь в отладке проблемы, предоставьте полное описание того, что вы пробовали, и результаты, которые вы получаете. Скажите нам, если у вас была заявка на печать, чтобы убедиться, что вы не получили сообщение об ошибке. Попытка сыграть 20 вопросов, которые помогут вам, - это большая трата времени каждого. –

1

Если вы получаете сообщение об ошибке NSURLSession, ваш текущий код будет терпеть неудачу. Не делай этого.

Добавить заявление печати внутри блока завершения задачи данных, который регистрирует значение ошибки и данных. Также сканируйте файл downloadImage после преобразования данных в изображение.

И, наконец, покажите нам код для функции performUIUpdatesOnMain.

+0

Он говорит, что загрузка изображений, поэтому «NSURLSession» должна быть в порядке. Но действительно очень хорошо спросить «performUIUpdatesOnMain». –

+0

Он говорит: «Задача загружает изображение без ошибок», но если код просто проваливается, ничего не делая, если есть ошибка, он не может сказать, верно это или нет. –

Смежные вопросы