我正在使用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',原因:'不得从后台线程执行对布局引擎的修改。'
这是一个非常简单的图像分配。为什么会这样崩溃?!任何帮助将不胜感激!
答案 0 :(得分:8)
在后台线程上调用dataTaskWithURL
末尾的闭包运行。 UIKit(与大多数其他工具包一样)只能从主线程调用。您需要在主线程上设置图像,如下所示:
if !error {
NSLog("No Error!")
var image:UIImage = UIImage(data: data)
dispatch_async(dispatch_get_main_queue(), {
targetImage.image = image
})
}