【发布时间】:2016-06-12 16:57:11
【问题描述】:
通过 Firebase,我调用了许多 url 将其转换为 UIImage,但未以更正的顺序显示。控制台的 print func 标记当前索引:
0 2 1 3 4
JSON 是这样的:
{
"evento_1" = "http://.altervista.org/evento1.jpeg";
"evento_2" = "http://.altervista.org/evento2.jpeg";
"evento_3" = "http://.altervista.org/evento3.jpeg";
"evento_4" = "http://.altervista.org/evento4.jpeg";
"evento_5" = "http://.altervista.org/evento5.jpeg";
}
获取数据的函数:
ref.observeEventType(.Value, withBlock: { snapshot in
let nsDictionary = snapshot.value as? NSDictionary
for (key, value) in nsDictionary! {
dict[key as! String] = value
}
var index = 0
for (_, url ) in dict {
self.loadImage(url as! String, i: index)
index++
}
}, withCancelBlock: { error in
print(error.description)
})
图像加载功能:
func loadImage(urlString:String,i:Int)
{
let url = NSURL(string: urlString)
let data = NSData(contentsOfURL: url!)
self.eventi[i].image = UIImage(data: data!)
}
【问题讨论】:
-
您正在进行异步调用,因此结果将始终以未定义的顺序出现(根据定义,因为它是异步的)。您可以做的是在下载所有内容后并在显示它们之前对值进行排序。
-
问题编辑为同步的,同样的问题。
-
现在您已将代码更改为同步调用...您实际使用的是哪一个?!无论如何:字典没有顺序,它不是数组。所以遍历字典总是会给出无序的结果,即使是同步调用。
-
嗯,好的。那么我怎样才能对字典进行排序呢?
-
为什么不按正确的顺序将它放在一组图像上?