2016-04-01 11 views
-2

URLからイメージを取得しようとしていますが、contentsOfURLメソッドはnilを返し続けます。 URLは合法で、1つのイメージしかありません。 私はdispatch_get_global_queueメソッドと以下に説明するメソッドを試しました。 NSData値は、何度実行しても常にゼロです。私はすでにシミュレータを再起動しようとしました。ネットワークも高速で、ネットワークに問題はありません。 これはこれはあなたの関数は次のようになります方法ですContentsOfURLは完全に有効なURLからswift 2.0でnilを返します

var imageURL : NSURL(string : "https://www.nasa.gov/sites/default/files/wave_earth_mosaic_3.jpg") 

if let url = imageURL{ 
     spinner?.startAnimating() 
     let request = NSURLRequest(URL: url) 
     let task = NSURLSession.sharedSession().dataTaskWithRequest(request){(data,response,error) -> Void in 
      self.imageData = NSData(contentsOfURL: url) 
     } 
      dispatch_async(dispatch_get_main_queue()){ 
       if url == self.imageURL{ 
        self.image = UIImage(data: self.imageData!) 
       } 
       else{ 

       } 
     } 
     task.resume() 
    } 
+2

有効ですか?本当に?よく見てください;) –

+0

あまりにも間違って貼り付けてしまって申し訳ありません!私は正しいURLを試しています。 – user2604897

+0

あなたはhttpとhttpsの両方を使用しています...あなたはそれらのいずれかを使う必要があります...ブラウザでそのURLを開くと、あなたはアイデアを得ます –

答えて

0

を失敗しているコードの一部です。 GCDの必要はありません。 let task = ....NSData(contentsOfURL: url)のイメージを再度ダウンロードする必要はありません。Eric Dと記載されています。

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     var imageURL = "https://www.nasa.gov/sites/default/files/wave_earth_mosaic_3.jpg" 

     loadImage(fromUrl: imageURL) { (image, error) in 
      if let image = image { 
       print("got an image") 
      } else { 
       print("got an error") 
      } 
     } 
    } 

    // pretty function that takes a string and a callback 
    // it sends either an image or an error back through the callback 
    func loadImage(fromUrl urlString: String, completion:(image:UIImage?,error:NSError?) -> Void) { 

     guard let url = NSURL(string:urlString) else { 
      // invalid url 
      completion(image: nil,error: nil) 
      return 
     } 

     let request = NSURLRequest(URL: url) 
     NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in 

      if let error = error { 
       completion(image: nil,error: error) 
       return 
      } 

      guard let data = data, image = UIImage(data:data) else { 
       // no connection error, but no image extracted from data 
       return completion(image: nil, error: nil) 
      } 

      completion(image: image, error: nil) 
     }.resume() 
    } 
} 
+1

「NASA​​のリンクにもエラーがあります」サーバーはあまりにも幸せではなかったかもしれませんが、数分前にOPのURLで画像を確認できました。 – Moritz

+0

また、err ... NSHRLSessionによってデータが既にダウンロードされているクロージャ内で、NSDataを使用してOP *とあなたもダウンロードしますか?イメージデータを2回ダウンロードしていますが、このコードはあまり意味がありません。 :) – Moritz

+0

@EricDコードのその部分を分析しませんでしたが、あなたは正しい、意味をなさない。 –

関連する問題