swift - 表格 View 未使用 Firebase 更新

标签 swift uitableview firebase firebase-realtime-database

我正在尝试从我的 Firebase 数据库中获取要更新的 TableView 。我的数据结构如下(用于报告汽车):

  1. 报告:
    • 随机生成的报告 ID 号:
      • 品牌:“汽车品牌”
      • 模型:“模型品牌”

我认为我没有正确调用数据。我不知道如何选择随机报告 ID。但是我可能还缺少其他东西。我试图只让车辆的品牌和型号显示在单元格的文本中

var reportList:[String] = []

var ref: DatabaseReference!

var handle: DatabaseHandle?


@IBOutlet weak var reportsTableView: UITableView!

@IBAction func backButtonPressed(_ sender: UIBarButtonItem) {
    self.performSegue(withIdentifier: "reportsToHome", sender: self)
}

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

}


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")

    cell.textLabel?.text = reportList[indexPath.row]

    return cell
}


override func viewDidLoad() {
    super.viewDidLoad()

    ref = Database.database().reference()

    handle = ref.child("Reports").observe(.childAdded, with: { (snapshot) in
        if (snapshot.value as? String) != nil
        {
            let make = String(describing: self.ref.child("Reports").child("make"))
            let model = String(describing: self.ref.child("Reports").child("model"))
            self.reportList.append(make + model)

            self.reportsTableView.reloadData()
        }
    }

    // Do any additional setup after loading the view.
)}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

最佳答案

我无法对此进行测试,但我感觉您正试图将快照转换为字符串。相反,您应该将其转换为字典,以便您可以轻松地按键检索数据。

试试这段代码。它将快照设置为字典,您可以从那里检索品牌和型号:

override func viewDidLoad() {
super.viewDidLoad()

ref = Database.database().reference()

handle = ref.child("Reports").observe(.childAdded, with: { (snapshot) in
   if let reports = snapshot.value as? NSDictionary {
        var make = reports?["make"] as? String
        var model = reports?["model"] as? String

        self.reportList.append(make + model)
        self.reportsTableView.reloadData()
    }
}
)}

更进一步,您可以创建一个 Report 类:

class Report: NSObject {
    var make: String?
    var model: String?
}

然后您可以根据快照设置品牌和型号以创建新的报表对象。

var make = reports?["make"] as? String
var model = reports?["model"] as? String
let newReport = Report()
newReport.setValuesForKeys(reports)

我希望这能奏效,否则我会再看一遍。

关于swift - 表格 View 未使用 Firebase 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45440548/

相关文章:

ios - 在 UITableView 的部分中填充行的最佳方法?

ios - UITableView 的异步加载

android - Firebase 谷歌身份验证不工作 android

ios - 如何设置UIDatePicker仅几个月

ios - 始终从 UIImagePickerController 返回编辑后的图像

ios - didSelectRowAtIndexPath 未被调用(Swift)

javascript - 无法访问传递给组件 React 的对象

ios - 如何在 TableViewcell 中为 Swift 保存 Firebase key

swift - 如何使用UINavigationController开启个人cocoaTouchFramework

ios - UIAlertAction 处理程序在错误的时间调用?