我正在与Firebase和CollectionViews中的Observs一起使用信息填充我的单元格。我的所有数据都正确显示在我的collectionView上,当我完成从Firebase中的帖子更新值时出现了问题,应用程序在更新后开始向上滚动,并复制了单元格中的值。
我已经尝试在我使用的大多数常用功能中调用reloadData,但是一直滚动到顶部。仅当我用相机拍摄照片时,才会出现重复的单元格。
var postVibe = [PostVibe]()
fileprivate func fetchPostWithUser() {
guard let uid = Auth.auth().currentUser?.uid else { return }
guard let city = CityState.currentCity else { return }
let ref = Database.database().reference().child("vibes").child("city").child(city)
ref.observe(.value, with: { (snapshot) in
self.postVibe.removeAll()
if snapshot.exists() {
self.collectionView.refreshControl?.endRefreshing()
guard let vibeDic = snapshot.value as? [String: Any] else { return }
vibeDic.forEach({ (key, value) in
guard let newDic = value as? [String: Any] else { return }
var vibe = PostVibe(postId: key, dictionary: newDic)
Database.database().reference().child("votes").child(vibe.postId).child(uid).observe(.value, with: { (snapshot) in
if snapshot.exists() {
if let value = snapshot.value as? Int, value == 1 {
vibe.hasVoteUp = true
vibe.hasVoteDown = false
} else {
vibe.hasVoteUp = false
vibe.hasVoteDown = true
}
} else {
}
self.postVibe.append(vibe)
DispatchQueue.main.async {
self.collectionView.reloadData()
}
}, withCancel: { (err) in
print("Failed to fetch Votes: ", err)
})
})
} else {
self.collectionView.refreshControl?.endRefreshing()
}
}) { (err) in
print("Failed to fetch Vibes: ", err)
}
}
我希望从我的代码中得到的期望是能够删除旧数据并仅显示新数据,其中包括已更新的数据,重复的单元格在我只需要3个单元格时不会显示6个单元格在数据库中。
答案 0 :(得分:2)
这是我用于tableView滚动的内容,如果可能,可以将其用于collectionView。
let contentOffset = tableView.contentOffset
tableView.reloadData()
tableView.setContentOffset(contentOffset, animated: false)