使用Swift将新图像分配给UIImageView

时间:2014-07-23 19:14:19

标签: ios uiimageview swift nsurlsession

我正在使用Xcode 6 Beta 4,而我正在尝试检索远程图像并将其分配给UIImageView。我使用NSURLSession dataTask来使这个异步。这是我的代码:

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

这就是我打电话的方式:

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

这是我得到的错误:(

  

由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'不得从后台线程执行对布局引擎的修改。'

这是一个非常简单的图像分配。为什么会这样崩溃?!任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:8)

在后台线程上调用dataTaskWithURL末尾的闭包运行。 UIKit(与大多数其他工具包一样)只能从主线程调用。您需要在主线程上设置图像,如下所示:

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