使用Firebase填充阵列填充原型单元格
如何使用Firebase填充TableView单元格?我试图用Firebase填充数组来填充它,但由于数据是异步填充的,我不知道如何使数组填充getData()函数之外的数据。截至目前,数据在完成处理程序中被填充,但在其之外,它是零。使用Firebase填充阵列填充原型单元格
import UIKit
import Firebase
class ProxiesListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var ProxiesTableView: UITableView!
var proxyname:[String] = []
var proxyprice:[Int] = []
var proxycountry:[String] = []
var databaseRef : FIRDatabaseReference!
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return proxyname.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ProxiesTableViewCell
cell.countryFlag.image = UIImage(named: proxycountry[indexPath.row])
cell.NameLabel.text = proxyname[indexPath.row]
cell.priceLabel.text = "$" + String(proxyprice[indexPath.row])
return(cell)
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//add code
}
override func viewDidLoad() {
super.viewDidLoad()
ProxiesTableView.delegate = self
ProxiesTableView.dataSource = self
getData()
}
func getData() {
databaseRef = FIRDatabase.database().reference()
/*
proxyname = ["50 Proxies (24 Hours)", "100 Proxies", "10 Proxies", "60 Proxies (48 Hours)"]
proxyprice = [600, 140, 60, 10]
proxycountry = ["CA", "UK", "UK", "US"]
*/
self.databaseRef.child("ProxiesItemsFeed").observe(.childAdded, with: { (snapshot) in
if let proxynames = snapshot.key as String! {
self.proxyname.append(proxynames)
self.databaseRef.child("ProxiesItemsFeed").child(proxynames).observe(.childAdded, with: { (snapshot) in
if let country = snapshot.key as String! {
self.proxycountry.append(country)
}
if let price = snapshot.value as! Int! {
self.proxyprice.append(price)
}
})
}
})
}
}
您应该添加tableView.reloadData()
您完成处理内(即,一个在你的getData()
法)。
方法文档:
调用此方法重新加载用于构造该表中,包括细胞,部分页眉和页脚,索引阵列,等等的所有数据。
它仍然没有显示任何东西 – user7780338
@ user7780338你的'if let price = ...'看起来很奇怪。这不应该是'如果让价格= snapshot.value为? Int'?你确定你没有得到任何运行时错误吗? –
我没有得到任何运行时错误,一切正常,除了单元格不能填充,因为该数组在零数据的getData()函数的末尾。 – user7780338
如果将* print(snapshot)*添加为闭包内的第一行,会发生什么情况。它打印什么?第二个问题:使用.childAdded迭代多少个节点?最后一件事是你在闭包中丢失了一个tableView.reloadData(),但是,如果你有1000个子节点会重载你的tableView 1000次并且效率不高。有几个选项可以帮助解决这个问题,但在提出解决方案之前,我们首先需要更多信息。 – Jay
我现在已经开始工作了,但每次我重新加载页面时,都会出现索引超出范围的错误。 – user7780338
你的意思是重新加载* tableView *?发生错误的线是什么? – Jay