使用存储在Firebase数据库中的数据填充UITableView

时间:2016-08-11 13:15:04

标签: swift uitableview firebase firebase-realtime-database

我的iPhone应用程序中有一个UITableVIew,它使用数组填充每个单元格,但问题是如何使用从firebase数据库中检索的值填充数组:

func retData(){
    rootRef.child("users").child("Test").observeEventType(.Value){
        (snap: FIRDataSnapshot) in
    }
}

 var no1 = ["3","6","3","4","5","20","34","34"]

表格代码:

  func tableView(tableView: UITableView, cellForRowAtIndexPath     
 indexPath: NSIndexPath) -> UITableViewCell {

 let cell1 = self.h_table.dequeueReusableCellWithIdentifier("cell1",    
 forIndexPath: indexPath) as! Hole_Cell

    cell1.s_label.text = usersArray[indexPath.row]

firebase数据结构:

 --Users
       --Test: 1
       --Test1: 2
       --Test2: 3
       --Test4: 4 

2 个答案:

答案 0 :(得分:2)

试试这个:

var usersArray: [String]?

func retData() {
    rootRef.child("users").observeEventType(.Value, withBlock: { snapshot in


        usersArray = [String]()
        for user in snapshot.allObjects as! [FIRDataSnapshot] {
          let userString = user.value as? String
          usersArray?.append(userString!)
        }

    })
}

***编辑试试这个:

var usersArray = [String]()

func retData() {
    rootRef.child("users").observeEventType(.Value, withBlock: { snapshot in

        let usersDict = snapshot.value as! [String:String]
        self.usersArray= Array(usersDict.values)
        self.tableView.reloadData()
       }

    })
}

***再次编辑:在闭包内添加此内容以说明用户何时没有数据。

        if let _ = snapshot.value as? NSNull {
          return
        } else {
           let usersDict = snapshot.value as! [String:String]
           self.usersArray= Array(usersDict.values)
           self.tableView.reloadData()
        }

答案 1 :(得分:0)

检查我的最新问题,基本上是相同的东西。结帐Firebase UI,非常实用。

我使用了ViewController,其中包含一个表视图和一个Prototype Cell。然后这对我有用:

import Firebase
import FirebaseDatabaseUI

class LinksViewController: UIViewController, UITableViewDelegate {

var dataSource: FirebaseTableViewDataSource?
var ref = FIRDatabase.database().reference()
@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
  super.viewDidLoad()

dataSource = FirebaseTableViewDataSource.init(query: myQuery(),prototypeReuseIdentifier: "<Your-Identifier>", view: self.tableView)

dataSource?.populateCellWithBlock { (cell: UITableViewCell, obj: NSObject) -> Void in

//Populate your Cell here
}
       tableView.dataSource = dataSource
       tableView.delegate = self


 }
  }

请注意,myQuery基本上就是您的第一行。