#ios #swift #uitableview #firebase #firebase-realtime-database
#iOS #swift #uitableview #firebase #firebase-realtime-database
Вопрос:
Когда я запускаю свое приложение, оно должно отображать имя и данные о местоположении всех сторон в моей базе данных, но этого не происходит. Я почти уверен, что получаю правильные данные, но я не знаю, что не так. Как мне заставить мою таблицу отображать все данные и обновлять каждый раз, когда добавляются новые данные?
import UIKit
import Firebase
import FirebaseDatabase
class FindPartiesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var parties = [party]()
@IBOutlet weak var partyTable: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
partyTable.delegate = self
partyTable.dataSource = self
let ref = FIRDatabase.database().reference()
ref.child("parties").queryOrderedByKey().observe(.childAdded, with: {
snapshot in
let snapshotValue = snapshot.value as? NSDictionary
let name = snapshotValue?["name"] as! String
let location = snapshotValue?["location"] as! String
let description = snapshotValue?["description"] as! String
self.parties.append(party(name: name, description: description, location: location))
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// creates the number of cells in the table
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return parties.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Make table cells the show the user name
var cell = partyTable.dequeueReusableCell(withIdentifier: "Cell")
let nameLabel = cell?.viewWithTag(1) as! UILabel
nameLabel.text = parties[indexPath.row].name
let locationLabel = cell?.viewWithTag(2) as! UILabel
locationLabel.text = parties[indexPath.row].location
return cell!
}
}
Вот моя настройка базы данных:
testApp
parties
-KUUzxkssjWoSZ22QS8r
description: ""
location: "Here"
name: "party 1"
-KUV0ObFVbPyI_SJ0f3F
description: ""
location: "There"
name: "party 2"
Ответ №1:
Вам необходимо перезагрузить табличное представление после обновления вашей модели данных:
ref.child("parties").queryOrderedByKey().observe(.childAdded, with: {
snapshot in
let snapshotValue = snapshot.value as? NSDictionary
let name = snapshotValue?["name"] as! String
let location = snapshotValue?["location"] as! String
let description = snapshotValue?["description"] as! String
self.parties.append(party(name: name, description: description, location: location))
DispatchQueue.main.async {
partyTable.reloadData()
}
})