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)
}
})
}
})
}
}
* print(snapshot)*をクロージャーの最初の行に追加するとどうなりますか?何かを印刷していますか? 2番目の質問:.childAddedを使用していくつのノードを繰り返しますか?最後に、クロージャ内でtableView.reloadData()が欠けています。しかし、1000回のchildViewを持っていてtableViewを1000回リロードすると非常に効率的ではありません。これを手助けするオプションはいくつかありますが、解決策を提案する前にまず情報が必要です。 – Jay
私は今すぐ動作するようになっていますが、ページをリロードするたびにインデックスから範囲外のエラーが発生します。 – user7780338
* tableView *をリロードすることを意味しますか?そして、どの行にエラーが発生していますか? – Jay