【问题标题】:My Images are not loading in the correct order我的图像没有按正确的顺序加载
【发布时间】:2020-04-15 21:51:28
【问题描述】:

我有一个名为 (events) 的 tableview,我从 firebase 中提取图像并加载它们,这个想法是发布事件并在事件帖子中添加传单图像。它工作得很好,但是当我关闭应用程序并重新打开图像时,图像的顺序不正确,并且一些图像出现在错误的事件中。任何帮助将不胜感激我对编码很陌生。

        eventsDatabaseHandle = eventsRef?.child("Church Events").observe(.childAdded, with: { (snaphot) in
            let eventPost = snaphot.value as! [String: Any]
            var event = Event(title: eventPost["eventtitle"] as! String,
                              timestamp: eventPost["eventdate"] as! String,
                              location: eventPost["eventlocation"] as! String,
                              image: nil)

            let task = URLSession.shared.dataTask(with: URL(string: eventPost["ImageUrl"] as! String)!) { data, _, error in

                if let image: UIImage = UIImage(data: data!) {
                    event.image = image
                    DispatchQueue.main.async {
                        self.events.append(event)
                        self.tableView.reloadData()
                    }
                }
            }
            task.resume()

        })


}


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return events.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "events", for: indexPath) as! EventsTableViewCell
        let event = events[indexPath.row]
        cell.flyerImages.image = event.image
        cell.eventTitle.text = event.title
        cell.eventDate.text =  event.timestamp
        cell.eventLocation.text = event.location

【问题讨论】:

  • 你可能想尝试this方法
  • 嗨@AliZahr,谢谢你的回复,你能告诉我我的代码会是什么样子吗?
  • 在初始化事件后,不要下载图像,只需附加到数组并重新加载表。在 cellForRowAtIndexPath 中使用答案中解释的库下载图像
  • 嗨@Ali 我试图让你推荐工作,但我无法弄清楚或者它不起作用。就像我说的那样,我对 swift 真的很陌生。

标签: swift asynchronous firebase-realtime-database


【解决方案1】:

编辑您的 Event 对象以获取 imageURL 而不是 UIImage,并在下载 this lightweight library 处理下载和缓存您的图像后尝试以下操作

    eventsDatabaseHandle = eventsRef?.child("Church Events").observe(.childAdded, with: { (snaphot) in
        let eventPost = snaphot.value as! [String: Any]
        var event = Event(title: eventPost["eventtitle"] as! String,
                          timestamp: eventPost["eventdate"] as! String,
                          location: eventPost["eventlocation"] as! String,
                          imageURL: eventPost["ImageUrl"])

         self.events.append(event)
    })

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "events", for: indexPath) as! EventsTableViewCell
    let event = events[indexPath.row]

    if let imgURL = URL(string:event.imageURL)
    {
        cell.flyerImages.kf.setImage(with:imgURL)
    }
    cell.eventTitle.text = event.title
    cell.eventDate.text =  event.timestamp
    cell.eventLocation.text = event.location
}

【讨论】:

  • 谢谢!!阿里成功了!!
猜你喜欢
  • 1970-01-01
  • 2015-09-08
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 2019-02-01
相关资源
最近更新 更多