使用Swift将新图像分配给UIImageView

Jor*_*oza 5 uiimageview ios nsurlsession swift

我正在使用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()
}
Run Code Online (Sandbox Code Playgroud)

这就是我打电话的方式:

        self.dataTask("http://bicicletaspony.com/img/spn/TeamA.png", targetImage: image)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:(

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

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

iai*_*ain 8

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

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