用Swift给UIImageView分配一个新图像



我使用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'而终止应用程序,原因:'对布局引擎的修改不能从后台线程执行'

这是一个非常简单的图像分配。为什么它会那样坠毁?任何帮助将非常感激!

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

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

相关内容

最新更新