【问题标题】:Issue displaying array of image from url显示来自 url 的图像数组的问题
【发布时间】: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!)
 }

【问题讨论】:

  • 您正在进行异步调用,因此结果将始终以未定义的顺序出现(根据定义,因为它是异步的)。您可以做的是在下载所有内容后并在显示它们之前对值进行排序
  • 问题编辑为同步的,同样的问题。
  • 现在您已将代码更改为同步调用...您实际使用的是哪一个?!无论如何:字典没有顺序,它不是数组。所以遍历字典总是会给出无序的结果,即使是同步调用。
  • 嗯,好的。那么我怎样才能对字典进行排序呢?
  • 为什么不按正确的顺序将它放在一组图像上?

标签: ios json swift firebase


【解决方案1】:

将您的 Firebase 快照键放入一个数组中,并将键:值对放入一个字典中。然后对键数组进行排序:

arrayOfKeys = Array(dict.keys) //swift
arrayOfKeys.sort {
  return $0 < $1
}

然后您可以遍历数组以获取事件名称(键),它对应于您的字典中的对象(通过键访问它)返回它的值。

或者(我更喜欢这个)

只需将每个 .value 字典放入一个数组中,然后按 eventName 对数组进行排序(假设这是关键)

eventArray.sort({ $0.eventName > $1.eventName })

【讨论】:

    【解决方案2】:

    正如 Jay 和 Eric 所说:字典没有明确的顺序。 FDataSnapshot 确实有一个定义好的顺序,但是一旦你把它转换成字典,你就把它扔掉了。

    因此,与其先转换为字典然后循环,不如简单地循环遍历快照的子项:

    for child in snapshot.children {
       let key = child.key as String
    
       print(key);
    }
    

    在我打印密钥的地方,您可以对子快照执行任何您需要的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2016-10-11
      相关资源
      最近更新 更多