我正在尝试使用Firebase Realtime数据库中的数据填充表格视图

时间:2019-07-26 07:55:15

标签: ios swift firebase-realtime-database

我可以将当​​前的tableview数据加载到数据库中,然后将新数据打印到控制台上,但是无法将新数据重新返回到tableview中,因为我知道它应该很简单,所以我不遗余力!

我已经尝试过各种方法,但我只是想不出我要去哪里。

//Saves to database without any problems
//Class
var ref: DatabaseReference!
//ViewDidLoad
ref = Database.database().reference()

func save()
{
let ref = Database.database().reference(withPath: "Admin")

let adding = ref.child(me)

let addData: [String: [String]] = ["addJokes": data]

adding.setValue(addData)
{
    (error:Error?, ref:DatabaseReference) in
    if let error = error
    {
        print("Data could not be saved: \(error).")
    }
    else
    {
        print("Data saved successfully!")
    }
}
}

可以将数据库数据打印到我的控制台,但是无法将其放入我的表视图中

let ref = Database.database().reference(withPath: "Admin")

    ref.observe(.value, with:
        {
            (snapshot) in

            let new = snapshot.value as? String

            print(snapshot.value as Any)

            if let newData = new
            {
                self.data.append(newData)
                self.mainTable.reloadData()
            }
    })

更新

TableView详细信息-

TableView类扩展

extension TableView: UITableViewDataSource, UITableViewDelegate

{

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        if isSearching {
             return filteredArray.count
        }
        else
        {
            return data.count
        }
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        var array: String?
        if isSearching
        {
            array = filteredArray[indexPath.row]
        }
        else
        {
            array = data[indexPath.row]
        }
        let cell = mainTable.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as UITableViewCell
      cell.textLabel?.text = array
        return cell
    }

TableView类-

class TableView: UIViewController

{

    let cellId = "cellId"

    var filteredArray = [String]()

    var ref: DatabaseReference!

    var data = [

        """
       multiple line 
       data array
        """
       ]

    lazy var mainTable: UITableView =
        {
            let table = UITableView()
            table.translatesAutoresizingMaskIntoConstraints = false
            table.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
            return table
    }()
        override func viewDidLoad() {
        super.viewDidLoad()
        mainTable.delegate = self
        mainTable.dataSource = self
}

控制台将我想要的内容完全打印回到表视图中。将打印功能转换为结果通常是容易的部分。

1 个答案:

答案 0 :(得分:1)

问题出在let new = snapshot.value as? String。这里,new为null,因此if let newData = new始终为false,并且如果不执行块。首先,检查snapshot.value的数据类型和值,然后相应地使用它。