Я написал запрос Firebase, который получает информацию из моей базы данных Competition и затем загружает ее в мои distanceData (который имеет тип distanceModel, класс, который я создал) перед заполнением табличного представления. Однако табличное представление не заполняется.
Фотография Firebase db
Фотография класса DistanceModel
Я попытался вставить операторы print в запрос, чтобы проверить, правильно ли извлекаются данные, но ничего не печатается, поэтому проблема, скорее всего, связана с запросом.
var distanceData = [distanceModel]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate=self
tableView.dataSource=self
self.tableView.rowHeight = 200
refUser = Database.database().reference().child("userInfo");
let userID = Auth.auth().currentUser!.uid
let query = refUser?.queryOrdered(byChild: "userId").queryEqual(toValue: "\(userID)")
query?.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let childSnap = child as! DataSnapshot
var dict = childSnap.value as! [String: Any]
let level=dict["level"] as! String
if (level=="Beginner") {
self.refCompetition = Database.database().reference().child("competition1");
}
else if (level=="Intermediate") {
self.refCompetition = Database.database().reference().child("competition2");
}
else {
self.refCompetition = Database.database().reference().child("competition3");
}
}
})
получить сообщения и прослушать изменения
refCompetition?.observe(DataEventType.value, with: { (snapshot) in
for users in snapshot.children.allObjects as! [DataSnapshot] {
let userObject = users.value as? [String: AnyObject]
let userName = userObject?["name"] as! String?
let userDistance = userObject?["distance"] as! String?
print(userName)
print(userDistance)
let dist = distanceModel(name: userName,distance: userDistance)
self.distanceData.append(dist)
}
})
self.tableView.reloadData()
}
Количество рядов
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return distanceData.count;
}
Содержимое для каждой ячейки
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "DistanceCell", for: indexPath) as! DistanceCell
let dist: distanceModel
dist = distanceData[indexPath.row]
cell.nameLabel.text = dist.name
cell.distanceLabel.text = dist.distance
cell.rankNumber.text = String (indexPath.row+1)
return cell
}
Он должен получить данные из соответствующей базы данных соревнований и затем отобразить результаты в табличном представлении.