swift - 无法使用 firebase 在表格 View 单元格中显示图像

标签 swift firebase

我无法在表格 View 单元格中使用 firebase 显示图像,我不知道为什么,因为我的代码似乎可以工作,但不在那里,有人可以帮助我吗?

注意:标签Works。我使用 cocoa touch 类创建了一个自定义单元格,然后我使用符号将其链接到单元格,如您所见。

import UIKit
import Firebase



class PlacesTableViewController: UIViewController, 
UITableViewDataSource, UITableViewDelegate{
let ref = Database.database().reference()
var PlacesRef:DatabaseReference! = nil
var SelectedRef:DatabaseReference! = nil
let storage = Storage.storage()
var postdata:[String] = [String]()



@IBOutlet weak var tableview: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()


    print("Here Variables")
    print("Here translated Names")
    PlacesRef = ref.child("Places")
    let storageRef = self.storage.reference()
    PlacesRef.observe(.value) { (snapshot) in
        let postDict = snapshot.value as? [String : AnyObject] ?? [:]
        if snapshot.exists() {
            for a in ((snapshot.value as AnyObject).allKeys)!{
                var now:String = ""
                self.postdata.append(a as! String)

                DispatchQueue.main.async{
                    self.tableview.reloadData()
                }
            }
        } else {
            print("we don't have that, add it to the DB now")
        }

        print(self.postdata) //add key to array
    }
    tableview.delegate = self
    tableview.dataSource = self
}




func tableView(_ _tableView: UITableView, numberOfRowsInSection selection: Int) ->Int{
    print(postdata)

    return postdata.count
}


func tableView( _ tableview: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
   let cell = tableview.dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell
    var image=UIImage()
    let StorageRef = storage.reference()
    let NationRef = StorageRef.child("Nations/\(postdata[indexPath.row]).jpg")
    print("\(postdata[indexPath.row]).jpg")
    NationRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
        if let error = error {
            print(error)
        } else {
            // Data for "images/island.jpg" is returned
            image = UIImage(data: data!)!
            print("image downloaded!")
        }
    }



    cell.DetailLabel.text = postdata[indexPath.row]
    cell.DetailImage.image = image
    return cell
}


}

最佳答案

让我们看看会发生什么

func tableView( _ tableview: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
   let cell = tableview.dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell
    var image=UIImage()
    let StorageRef = storage.reference()
    let NationRef = StorageRef.child("Nations/\(postdata[indexPath.row]).jpg")

// HERE we starting async web request for image data   (tag 1)      

    NationRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
        if let error = error {
            print(error)
        } else {
            // HERE we getting image data from async request and storing it in image var (tag 3) 
            image = UIImage(data: data!)!
            print("image downloaded!")
        }
    }

    cell.DetailLabel.text = postdata[indexPath.row]

    // HERE we setting UIImage to cell's imageView  (tag 2)  
    cell.DetailImage.image = image
    return cell
}

如果打印标签,我们将得到标签 1、标签 2 和标签 3。这意味着首先您创建空的 uiimage,然后将此图像设置为单元格的 imageView,最后您将图像更改为来自请求的图像(图像,而不是单元格的图片 View )

我认为答案可以是 - 将 image = UIImage(data: data!)! 替换为 cell.DetailImage.image = UIImage(data: data!)

还有很多方法可以改进这个方法

关于swift - 无法使用 firebase 在表格 View 单元格中显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49396562/

相关文章:

ios - 你如何在 React Native 中获取框架的大小?

swift - 获取文档标识符为 XXX 的多个文档

android - 播放服务广告与 appcompat 冲突

swift - 通过 Firebase 登录获取更大的 Facebook 图片(快速)

android - FCM 需要多长时间才能将推送通知发送到一个大基数的主题

android - 如何解决添加Firebase库失败的错误相关性

Firebase Android 崩溃报告

IOS:将 UIButton 添加到容器 View 和导航 Controller 内静态 TableView 的底部

ios - EXC_BAD_ACCESS KERN_PROTECTION_FAILURE 32位设备崩溃

ios - 你能帮我在 UIButton 中添加乐天吗?