Итак, я пытаюсь сделать запрос к моей базе данных пожарного магазина и собрать всех пользователей, у которых их сохраненное поле «docIDFromRide» равно текущему идентификатору документа (docID), и загрузить его в табличное представление. до сих пор у меня есть ощущение, что я поступаю об этом неправильно, так как я не получаю никаких ошибок из-за отсутствия документов или отображаемых имен, напечатанных на консоли
var myUsers:[AttendingUser] = [] // declaring array
override func viewDidLoad() {
super.viewDidLoad()
getUsers()
userTable.delegate = self
userTable.dataSource = self
}
// table view stuff
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
myUsers.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "attendCell", for: indexPath)
let user = myUsers[indexPath.row]
cell.textLabel?.text = user.displayName
return cell
}
// extension and where the firebase query is
extension RideEventViewController{
func getUsers(){
let db = Firestore.firestore()
db.collectionGroup("EventAttendees").whereField("docIDFromRide", isEqualTo: docID).getDocuments { (snapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
let documents = snapshot!.documents
try! documents.forEach{document in
let myUser: AttendingUser = try document.decoded()
print(myUser.displayName)
//Appending the data to the array
self.myUsers.append(myUser)
}
// Reloading tableview after the foreach
self.userTable.reloadData()
}
}
}
}
Вторая попытка
extension RideEventViewController{
func getUsers(){
let db = Firestore.firestore()
let eventRef = db.collection("EventAttendees")
eventRef.whereField("docIDFromRide", isEqualTo: docID)
.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
let dn = document.get("displayName")
let uid = document.get("uid")
print("\(dn) \(uid)")
let myUser: AttendingUser = try! document.decoded()
self.myUsers.append(myUser)
}
self.userTable.reloadData()
}
}
}
}
Он правильно хранит пользователей в базе данных, просто не вытягивая и не вставляя в представление таблицы.
макет базы данных