从 Firebase 实时数据库获取数据到 Tableview 单元格

时间:2021-03-17 00:36:05

标签: swift xcode uitableview tableview

我正在从 firebase 实时数据库中检索数据并使用它来设置表格视图单元格中的标签文本。现在,每当我在模拟器和/或在我的 iPhone 上打开 tableview 时,它都会出现空白。我已经确保可重用标识符是正确的,TableViewController 的名称在 swift 文件和故事板等中匹配。我已经运行了一些测试试图查看出了什么问题,我认为代码只是没有阅读数据库中的数据,即使我知道它在那里。这是 TableViewController 的当前代码:


import UIKit
import FirebaseDatabase
import FirebaseAuth

class RemoveSpots: UITableViewController {
    
    var spotRef:DatabaseReference?

    @IBOutlet weak var spotView: UITableView!
    
    var postData = [SpotModel]()
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! SpotCell
        
        let spot: SpotModel
        spot = postData[indexPath.row]
        cell.TypeLabel.text = spot.type
        cell.PriceLabel.text = spot.price
        cell.AvailLabel.text = spot.avail
        cell.ContactLabel.text = spot.contact
        
        return cell
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        spotView.delegate = self
        spotView.dataSource = self
        let userID = Auth.auth().currentUser?.uid
        spotRef = Database.database().reference().child("\(userID)")
        fillTable()
        spotView.reloadData()
    }
    
    func fillTable() {
        spotRef?.observe(.childAdded, with: { (snapshot) in
        
                for spots in snapshot.children.allObjects as![DataSnapshot] {
                    let spotObject = spots.value as? [String: AnyObject]
                    let spotType = spotObject?["Type"]
                    let spotPrice = spotObject?["Price"]
                    let spotAvail = spotObject?["Availability"]
                    let spotContact = spotObject?["Contact"]
                    let cell = SpotModel(type: spotType as! String, price: spotPrice as! String, avail: spotAvail as! String, contact: spotContact as! String)
                    self.postData.append(cell)
                }
                self.spotView.reloadData()
        })
    }
}

这是自定义单元格的代码:



import UIKit

class SpotCell: UITableViewCell {

    
    @IBOutlet weak var ContactLabel: UILabel!
    @IBOutlet weak var AvailLabel: UILabel!
    @IBOutlet weak var PriceLabel: UILabel!
    @IBOutlet weak var TypeLabel: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

连同第二个 swift 文件:


class SpotModel {
    var type: String?
    var price: String?
    var avail: String?
    var contact: String?
    
    init(type: String?, price: String?, avail: String?, contact: String?) {
        self.type = type
        self.price = price
        self.avail = avail
        self.contact = contact
    }
}

我不知道这里出了什么问题,已经解决了四分之一天,认为解决方案一定很简单,并且会以永恒的感激之情回报任何帮助。 Here is an example of the database layout. This is one User ID, with a few entries (titles with random numbers) within it. I am only trying to access the children of one user ID at a time (that of the current user), as you can see by the code

0 个答案:

没有答案
相关问题