【问题标题】:I tried to retrieving data from firebase database to tableview but I just got one element我试图从 firebase 数据库检索数据到 tableview,但我只有一个元素
【发布时间】:2018-01-17 08:40:50
【问题描述】:

我尝试将数据从 Firebase 数据库检索到 Xcode 中的 tableview 但即使我在数据库中有很多元素,我也只得到了一个元素。

我按照教程进行操作,假设我将 return sonsList.count 设置为 numberOfRowsInSection,但没有任何反应。

这是我的代码:

import UIKit
import Firebase
import FirebaseDatabase

class sons  {
    let name : String!
    //let place : String!

init(title_String : String!){

    self.name = title_String
   // self.place = place_String
    }   
}

class sonsTableViewController: UITableViewController {

    var ref:DatabaseReference!

    //var  sons = [String]()
    var newSon: String = ""
    let cellId = "cellId"
    var refHandel : uint!
    var sonsList = [sons]()

    override func viewDidLoad() {
        super.viewDidLoad()


        ref = Database.database().reference()
        ref.child("name").queryOrderedByKey().observeSingleEvent(of: .childAdded, with: { snapshot in

            let value = snapshot.value as? NSDictionary
            let name = value!["name"] as! String
            self.sonsList.append(sons(title_String : name))
            self.tableView.reloadData()

        })

        //fetchName()

    }

    func fetchName()  {

    }


    @IBAction func cancel(segue:UIStoryboardSegue) {


    }

    @IBAction func done(segue:UIStoryboardSegue) {

        var sonDetailVC = segue.source as! addSonViewController
        newSon = sonDetailVC.name
        // sons.append(newSon)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return sonsList.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        var cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
        let label = cell?.viewWithTag(1) as! UILabel
        label.text = sonsList[indexPath.row].name

        return cell!
    }

}

【问题讨论】:

  • 只有每次新增的记录才会得到
  • 是的,我第一次得到数据库中的第一个元素,然后如果我添加一个元素,我就得到了。如何检索所有数据?请
  • 使用valuechanged事件ref.child(" parrent of name").queryOrderedByKey().observeSingleEvent(of: .valueChanged, with: { snapshot in })
  • 不幸的是,在我添加此行后应用程序崩溃ref.child("name").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in
  • 请分享你的firebase JSON结构,这样我可以解释更多细节

标签: ios swift xcode firebase firebase-realtime-database


【解决方案1】:

您的数据库查询有问题。

您在sonsList 中只附加一个值。

    ref = Database.database().reference()
    ref.child("name").queryOrderedByKey().observeSingleEvent(of: .childAdded, with: { snapshot in

        //Parse snapshot value correctly it is array or not.

      if let dicValue = snapshot.value as? [String : Any] { 
     for (key,value) in dicValue { 
             let name = value["name"] as? String
             self.sonsList.append(sons(title_String : name))
     }
             self.tableView.reloadData()
  }
})

请参阅此链接以获取 Firebase 数据库中的数据。

https://firebase.google.com/docs/database/ios/read-and-write

【讨论】:

  • ref.child("name").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in ,我添加了这段代码,我观察者得到了数据,但应用程序迷恋
  • Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value 我刚得到 50 的 40 个元素,忘记了前 4 个元素
  • 您的 value!["name"] 有问题!字符串 。你能打印快照值吗?检查它是否有价值。
  • 所有数据都没有打印nil数据但是执行时到达let name = value!["name"] as! Stringbreak
  • 好的很好...做一件事检查值类型它是数组或字典..否则你能分享值..我会帮助找到确切的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多