2014-07-23 8 views
5

Utilizzo Xcode 6 Beta 4 e sto cercando di recuperare un'immagine remota e assegnarla a UIImageView. Sto usando un DataTask NSURLSession per renderlo asincrono. Ecco il mio codice:Assegna una nuova immagine a UIImageView con Swift

func dataTask(imageUrl: String, targetImage:UIImageView) { 

    let nsURL = NSURL(string: imageUrl) 

    let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL) { 
     (data, response, error) in 
     if !error { 
      NSLog("No Error!")     
      var image:UIImage = UIImage(data: data) 
      targetImage.image = image 
     } 
     else { 
      NSLog("Error!") 
     } 
    } 

    task.resume() 
} 

questo è come faccio la chiamata:

 self.dataTask("http://bicicletaspony.com/img/spn/TeamA.png", targetImage: image) 

e questo è l'errore che ottengo :(

terminazione app a causa di eccezione non identificata 'NSInternalInconsistencyException ', motivo:' Le modifiche al motore di layout non devono essere eseguite da un thread in background. '

È un compito immagine molto semplice. Perché si schianta in questo modo ?! qualsiasi aiuto sarà molto apprezzato!

risposta

8

Il ciclo di chiusura alla fine di dataTaskWithURL viene chiamato su un thread in background. UIKit (come la maggior parte degli altri toolkit) può essere chiamato solo dal thread principale. Avrai bisogno di impostare l'immagine sul thread principale con qualcosa del genere:

if !error { 
    NSLog("No Error!")    
    var image:UIImage = UIImage(data: data) 
    dispatch_async(dispatch_get_main_queue(), { 
     targetImage.image = image 
    }) 
} 
+1

iain Grazie per la risposta così veloce !, anche il tuo codice ha fatto il trucco! –