代码
var promos = [PromoGroup]()
var adsImages = Array<UIImage>()
override func viewDidLoad() {
super.viewDidLoad()
setupData()
//print 1
println(self.promos.count)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func setupData() {
getAllDataPromos { (PromoGroup, error) -> Void in
if error == nil {
self.promos = PromoGroup!
//print 2
println(self.promos.count)
for i in 0...self.promos.count-1 {
self.adsImages.append(UIImage(data: NSData(contentsOfURL: NSURL(string:"https://abs.com/content/bb2.jpg")!)!)!)
}
}
}
}
但adsImage无法显示图片,但是当我尝试将adsImage移动到viewDidLoad并且它也能正常工作时,结果是println
打印1个结果 0
打印2结果 3
计数数据如果在getAllDataPromos上,
如果我想在adsImage中显示图片,该怎么办...
由于
答案 0 :(得分:1)
(改编自我之前的答案:https://stackoverflow.com/a/28207368/2274694)
通过在调用println(self.promos.count)
之后立即调用setupData
,并因此在该方法中包含getAllDataPromos
,您就会尝试在self.promos.count
之前打印getAllDataPromos
&#39}。已在异步println(self.promos.count)
块中设置。
异步块在后台执行,因此在块在主线程上执行后立即写入的代码,异步块中的代码将不会完成。这就是为什么adsImage
在异步块内正确打印的原因 - 因为在那一点上,代码肯定已被执行;但是你不能直接在async块之外打印更新后的值,因为异步代码还没有完成执行。
同样,如果您尝试使用UIImageView
数组中的值在adsImages
df <- data.frame(ant.bearing = seq(0,300, by=60), sig = c(98, 60, 44, 67, 58, 91), ts=1)
中显示图像,则无法将该图像设置为异步块已完成,因此我建议在异步块中进行设置。