TableView仅显示从Firebase读入的部分数据

时间:2017-06-24 21:40:37

标签: arrays swift uitableview firebase asynchronous

我有以下代码,为Firbase数据库添加“Trip”

@IBAction func addButtonPressed(_ sender: UIButton) {

        let ref = Database.database().reference().child("Users").child(user).child("Trips").childByAutoId()

        if Double(distanceText.text!) != nil {
            trip.distance = Double(distanceText.text!)!
        } else {
            print("invaliddouble")
        }
        if tripNameText != nil {
            trip.title = tripNameText.text!
        }

        let tripType = bikeWalkToggle.titleForSegment(at: bikeWalkToggle.selectedSegmentIndex)

        trip.transportType = tripType!
        ref.child("Distance").setValue(trip.distance);ref.child("TripName").setValue(trip.title);ref.child("Transport").setValue(trip.transportType)

        navigationController!.popViewController(animated: true)


    }

问题是当我添加它时,当写入Distance的第一个值时,我的TableView在不同的UIViewController触发器中执行单独的数据库读取操作。

我将我的表格视图配置为显示每一行

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()

        cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
        cell.textLabel?.numberOfLines = 0

        if commuteArray[indexPath.row].isFilled(){
        cell.textLabel?.text = "\(commuteArray[indexPath.row].title!) by \(commuteArray[indexPath.row].transportType!) \n Distance: \(String(describing: commuteArray[indexPath.row].distance!)) miles"}
        return cell
    }

所以我最终获得的是为新项目显示的有效距离,但只是传输类型和标题的默认值。即使重新加载视图,它似乎也会留下这些空白,直到我关闭整个应用程序并重新打开它,强制从数据库中完全重新加载数据。

1 个答案:

答案 0 :(得分:2)

您只需拨打setValue

一次,就可以同时为数据库的行程写入所有三个值
ref.setValue([
  "Distance": trip.distance,
  "TripName": trip.title,
  "Transport": trip.transportType
])