2016-05-14 15 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

あなたのコードは、あなたのdownloadedImagenilに来ていることを間違ったURLを使用してのためにしているという事実を除いて正常に動作していることがこのデータ用UIImageを作成することはできませんので、正しいURLは次のとおりです。

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() 
} 

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

アップデート上記のコードとすべてのもののようにあなたのコードのコードは、細かい作業する必要があります

私はこれがあなたを助けてくれることを願っています。

+0

探偵の仕事の良いビット!コードで提供されているURLをチェックするとは思わなかったが、あなたは正しい。 (投票済み) –

+0

@DuncanC URLの事実を除いてすべてがコード内にあるので、私はチェックしました。 –

+0

"すべてがコード内にあるのでチェックしました..."それはどういう意味ですか?問題をデバッグするのに役立つ場合は、試した内容と得られた結果についての完全な説明を提供してください。エラーが発生していないことを確認するためにprintステートメントがある場合は、それを教えてください。あなたを助けるために20の質問を再生しようとすると、みんなの時間の大きな浪費です。 –

1

NSURLSessionからエラーが発生した場合、現在のコードは自動的に失敗します。それをしないでください。

エラーとデータの値を記録するデータタスクの完了ブロック内にprintステートメントを追加します。また、データをイメージに変換すると、downloadedImageもログに記録されます。

最後に、performUIUpdatesOnMain関数のコードを示してください。

+0

彼は画像をダウンロードするので、NSURLSessionはうまくいくはずです。しかし、実際には 'performUIUpdatesOnMain'を求めるのは非常に良い点です。 –

+0

彼は「タスクはエラーなしで画像をダウンロードする」と言っていますが、エラーがあれば何もせずにコードが単純に転落しても、それが真実かどうかはわかりません。 –

関連する問題