Swift 使用存储在Firebase数据库中的数据填充UITableView
我的iPhone应用程序中有一个UITableVIew,它使用数组填充每个单元格,但问题是如何使用从firebase数据库检索的值填充数组:Swift 使用存储在Firebase数据库中的数据填充UITableView,swift,uitableview,firebase,firebase-realtime-database,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 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
试试这个:
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()
}
})
}
***编辑并尝试以下操作:
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()
}
试试这个:
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()
}
})
}
***编辑并尝试以下操作:
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()
}
检查我最近的问题,基本上是一样的。结帐,非常有用 我使用了一个带有表视图和原型单元格的ViewController。这对我来说很有用:
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
}
}
导入Firebase
导入FirebaseDatabaseUI
类链接ViewController:UIViewController、UITableViewDelegate{
var数据源:FirebaseTableViewDataSource?
var ref=FIRDatabase.database().reference()
@IBVAR表格视图:UITableView!
重写func viewDidLoad(){
super.viewDidLoad()
dataSource=FirebaseTableViewDataSource.init(查询:myQuery(),prototypeReuseIdentifier:,视图:self.tableView)
dataSource?.populateCellWithBlock{(单元格:UITableViewCell,obj:NSObject)->中的Void
//在这里填充您的单元格
}
tableView.dataSource=数据源
tableView.delegate=self
}
}
请注意,
myQuery
基本上是您的第一行。检查我的最新问题,基本上是相同的内容。结帐,非常有用
我使用了一个带有表视图和原型单元格的ViewController。这对我来说很有用:
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
}
}
导入Firebase
导入FirebaseDatabaseUI
类链接ViewController:UIViewController、UITableViewDelegate{
var数据源:FirebaseTableViewDataSource?
var ref=FIRDatabase.database().reference()
@IBVAR表格视图:UITableView!
重写func viewDidLoad(){
super.viewDidLoad()
dataSource=FirebaseTableViewDataSource.init(查询:myQuery(),prototypeReuseIdentifier:,视图:self.tableView)
dataSource?.populateCellWithBlock{(单元格:UITableViewCell,obj:NSObject)->中的Void
//在这里填充您的单元格
}
tableView.dataSource=数据源
tableView.delegate=self
}
}
请注意,
myQuery
基本上就是您的第一行。您能告诉我们您的数据在firebase中是如何构造的吗?更新了包含数据结构的问题建议:或者您能告诉我们您的数据在firebase中是如何构造的吗?更新了包含数据结构的问题建议:或者它标记了一个错误值类型“FIRDataSnapshot”没有成员“AllObject”@crispy2k12请尝试我上面提出的新解决方案。我的错误索引超出范围,它们是否可以用来指定将在array@crispy2k12检查字典是否为空。创建usersDict后,添加以下行:print(“Dictionary:(usersDict)”)@crispy2k12 hmm。出于某种原因,您没有提取任何数据。确保在“用户”节点上有数据。从上面的数据来看,似乎是这样。我还更新了我的答案,以说明用户没有数据时的情况。它标记了一个错误“值类型”FIRDataSnapshot“没有成员”AllObject@crispy2k12请尝试我上面提出的新解决方案。我的错误索引超出范围,它们是否可以用于指定将在array@crispy2k12检查字典是否为空。创建usersDict后,添加以下行:print(“Dictionary:(usersDict)”)@crispy2k12 hmm。出于某种原因,您没有提取任何数据。确保在“用户”节点上有数据。从上面的数据来看,似乎是这样。我还更新了我的答案,以说明用户没有数据时的情况。