2016-04-01 3 views
-2

Ich versuche, ein Bild von einer URL abzurufen, aber die Methode contentsOfURL gibt immer null zurück. Die URL ist legal und hat nur ein Bild. Ich habe die Methode dispatch_get_global_queue und auch die unten beschriebene Methode ausprobiert. Der NSData-Wert ist immer Null, egal wie oft ich laufe. Ich habe bereits versucht, den Simulator neu zu starten. Das Netzwerk ist auch schnell und es gibt keine Probleme mit dem Netzwerk. Dies ist der Teil des Codes, dieContentsOfURL gibt nil in swift 2.0 von einer perfekt gültigen URL zurück

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

gültig? Ja wirklich? schau genau hin;) –

+0

Entschuldigung, das wurde falsch eingefügt! Ich versuche tatsächlich die richtige URL. – user2604897

+0

Sie verwenden http und https beide ... Sie müssen eine von ihnen verwenden ... Öffnen Sie diese URL im Browser, Sie werden eine Idee bekommen –

Antwort

0

Dies ist, wie Sie Ihre Funktion aussehen soll versagt. Keine Notwendigkeit für GCD. Es gibt auch keine Notwendigkeit für let task = .... und NSData(contentsOfURL: url) lädt das Bild wieder als Eric D angegeben.

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

'Ich habe auch einen Fehler auf dem Nasa-Link bekommen." Vielleicht war der Server damals nicht sehr glücklich, aber ich habe das Bild vor ein paar Minuten mit OPs URL in Ordnung gebracht. – Moritz

+0

Auch, ähm ... warum lädt OP * und Sie auch * mit NSData innerhalb einer Schließung, wo die Daten bereits von NSURLSession heruntergeladen werden? Sie laden die Bilddaten zweimal herunter, dieser Code macht für mich keinen Sinn. :) – Moritz

+0

@EricD Hat diesen Teil des Codes nicht analysiert, aber Sie haben Recht, macht keinen Sinn. –

Verwandte Themen