所以我试图从数据库中获取所有收藏夹以显示在tableview中。但是,当我最喜欢用户时,它只显示一个。
我的数据库结构如下:
Favourites:
UserID:
key: User 1
key: User 2
和我的代码:
var usersArray[UserClass]()
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
fetchFavourites()
}
func fetchFavourites () {
let userID = Auth.auth().currentUser?.uid
let favouriteRef = self.databaseRef.child("favourites").child(userID!)
favouriteRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
let favouriteID = "\(snapshot.value!)"
let usersRef = self.databaseRef.child("users")
usersRef.observe(.value, with: { (users) in
self.usersArray.removeAll()
for user in users.children {
let user = UserClass(snapshot: user as! DataSnapshot)
if favouriteID == user.uid {
self.usersArray.append(user)
}
self.tableView.reloadData()
}
})
})
}
我尝试在函数中创建另一个数组,然后将主数组设为=,但是在屏幕之间切换时它不会更新表视图。此代码仅在第一次加载页面视图时有效。但是,我使用的是一个不会在屏幕上显示日期的后退按钮。
谢谢,如果您希望我提供其他任何内容,请与我联系。
已编辑的代码(新问题,见下文):
func fetchFavourites () {
DispatchQueue.main.async( execute: {
let userID = Auth.auth().currentUser?.uid
var tempFav = [UserClass]()
let favouriteRef = self.databaseRef.child("favourites").child(userID!)
favouriteRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
let favouriteID = "\(snapshot.value!)"
let usersRef = self.databaseRef.child("users")
tempFav.removeAll()
usersRef.observe(.value, with: { (users) in
self.usersArray.removeAll()
for user in users.children {
let user = UserClass(snapshot: user as! DataSnapshot)
if favouriteID == user.uid {
tempFav.append(user)
}
self.usersArray = tempFav
self.tableView.reloadData()
}
})
})
})
}
问题已得到解决,它填充了所有喜欢的用户的tableview,如果我不喜欢它们就摆脱它们等等。但是,如果我不同于所有用户。即使数组应为空,该数组也会复制用户两次。