2016-05-14 72 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,正確的網址是:

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中收到錯誤,那麼您當前的代碼將以無提示方式失敗。不要這樣做。

在數據任務的完成塊中添加一條打印語句,該語句記錄錯誤和數據的值。一旦將數據轉換爲圖像,也會記錄下載的圖像。

最後,向我們展示您的performUIUpdatesOnMain函數的代碼。

+0

他說圖像下載,所以'NSURLSession'應該沒問題。但要求'performUIUpdatesOnMain'確實非常好。 –

+0

他說:「任務下載圖像沒有任何錯誤」,但如果代碼只是在沒有做任何事情的情況下發生,如果出現錯誤,他不能分辨這是真的還是沒有。 –