Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 表视图未使用Firebase更新_Swift_Uitableview_Firebase_Firebase Realtime Database - Fatal编程技术网

Swift 表视图未使用Firebase更新

Swift 表视图未使用Firebase更新,swift,uitableview,firebase,firebase-realtime-database,Swift,Uitableview,Firebase,Firebase Realtime Database,我正在尝试从Firebase数据库获取要更新的表视图。我的数据结构如下(用于报告汽车): 报告: 随机生成的报告ID号: 品牌:“汽车品牌” 模型:“模型制造” 我认为我没有正确调用数据。我不知道如何为随机报告ID选择。但可能还有其他我缺少的内容。我试图在单元格文本中仅显示车辆的品牌和型号 var reportList:[String] = [] var ref: DatabaseReference! var handle: DatabaseHandle? @IBOutlet

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

  • 报告:
    • 随机生成的报告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.
    }
    

    }

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

    试试这个代码。它将快照设置为字典,从中可以检索make和model:

    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()
        }
    }
    )}
    
    更进一步,您可以创建一个报表类:

    class Report: NSObject {
        var make: String?
        var model: String?
    }
    
    然后,可以从快照中设置make和model以创建新的报表对象

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

    我希望这能奏效,如果不行,我会再看一遍。

    您是想得到多个报告,还是只有一个报告?会有多个报告。数据库检查是否有任何新报告进入并发布。或者至少应该是这样。我试过了,但没用。同时,我会和报告课一起玩。编辑:没关系。它的作品,我不小心删除了太多的编辑时。非常感谢你的帮助!