0
我有一些麻烦,下面的代码。 虽然它的工作,但有一些时间问题。session.dataTask同步问题
首先让我说什么,我希望,我想数据下载完成后,我的形象准备使用时,完成处理程序应该运行。但现实似乎完全不同。当我尝试它时,完成处理程序立即被调用(我可以在控制台中看到'All OK'),就好像一切都是即时的。但图像实际上显示得更晚。我错过了什么?
let imageURL = URL(string: myURLString)
session = URLSession.shared,
_ = session.dataTask(with: imageURL) {[weak self]
(data: Data?, response: URLResponse?, error: Error?) in
if error == nil {
print("All OK")
self?.theImage = UIImage(data: data!)
self?.theView.image = self?.theImage
} else {print(error!)}
DispatchQueue.main.async {
self?.activityIndicator.stopAnimating()
self?.theView.setNeedsDisplay()
}
}.resume()
当数据从服务器加载并可用时,处理程序将再次被调用。你还应该在最后一个大括号之前添加session.finishTasksAndInvalidate().resume() –
好的。 “处理程序会再次被调用”是什么意思?它已被调用。应该被称为多次? – Michel
当数据被提取时,控件再次到达处理程序。另外,self?.theView.image = self?.Image应该在主线程上。你使用的是哪个版本的swift? –