2014-07-23 10 views
5

Xcode 6 Beta 4 kullanıyorum ve uzak bir resmi almaya ve bir UIImageView öğesine atamaya çalışıyorum. Bu asenkronize yapmak için NSURLSession dataTask kullanıyorum. i arama yapmak nasılSwift ile UIImageView'e yeni bir görüntü atama

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

şudur: İşte benim kodudur

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

Ve bu 'i nedeniyle yakalanmamış istisna uygulaması sonlandırılması :(

olsun NSInternalInconsistencyException hatadır ', sebep:' Düzen altyapısına yapılan değişiklikler arka plan iş parçacığından yapılmamalıdır. '

Çok basit bir resim atama. Neden bu şekilde çöküyor ?! herhangi bir yardım çok takdir edilecektir!

cevap

8

dataTaskWithURL'un sonundaki kapatma işlemi arka plan iş parçacığı üzerinde çağrılır. UIKit (diğer birçok araç takımı gibi) sadece ana iş parçacığından çağrılabilir. Görüntüyü ana iş parçacığına şöyle ayarlamanız gerekir:

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

iain Yanıtınız çok hızlı !, Ayrıca kodunuz da hile yaptı! –