我使用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
})
}