gpt4 book ai didi

swift - 如何根据添加到 firebase 的信息更新 collectionview

转载 作者:行者123 更新时间:2023-11-28 13:48:26 25 4
gpt4 key购买 nike

我的应用程序有问题,我正在开发类似 Twitter/Instagram 的应用程序,该应用程序发布图片,然后在“主页”部分检索它。但是,当在 firebase 中添加新帖子时,我找不到更新 Collection View 的方法。我尝试了 self.collectionview.reloadData(),它没有用,我尝试了 self.posts.removeAll() 然后 self.fetchPosts() 再次检索它,但它没有用。几个月来我一直在研究这个问题,只是找不到一个可能的解决方案,而不必为一个“小问题”支付 $$。提前致谢!

这是我的代码:

@IBOutlet weak var collectionview: UICollectionView!

var posts = [Post]()
var following = [String]()
lazy var refreshControl: UIRefreshControl? = {
let refreshControl = UIRefreshControl()
refreshControl.tintColor = UIColor.gray
refreshControl.addTarget(self, action: #selector(refreshList), for: UIControlEvents.valueChanged)
collectionview.addSubview(refreshControl)
self.collectionview.reloadData()

return refreshControl
}()
override func viewDidLoad() {
super.viewDidLoad()

setupNavigationBarItems()
fetchPosts()
collectionview.refreshControl = refreshControl

}

func setupNavigationBarItems() {
navigationItem.title = "Home"
}

@objc func refreshList() {
let deadline = DispatchTime.now() + .milliseconds(1000)
DispatchQueue.main.asyncAfter(deadline: deadline) {

self.collectionview.reloadData()
self.refreshControl?.endRefreshing()
print("reloaded...")
}
self.collectionview.reloadData()
}

@objc func fetchPosts() {

let ref = Database.database().reference()

ref.child("users").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in

let users = snapshot.value as! [String : AnyObject]

for (_,value) in users {
if let uid = value["uid"] as? String {
if uid == Auth.auth().currentUser?.uid {
if let followingUsers = value["following"] as? [String : String]{
for (_,user) in followingUsers{
self.following.append(user)
}
}
self.following.append(Auth.auth().currentUser!.uid)

ref.child("posts").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snap) in

let postsSnap = snap.value as! [String : AnyObject]
for (_,post) in postsSnap {
if let userID = post["userID"] as? String {
for each in self.following {
if each == userID {
let posst = Post()
if let author = post["author"] as? String, let likes = post["likes"] as? Int, let pathToImage = post["pathToImage"] as? String, let postID = post["postID"] as? String {

posst.author = author
posst.likes = likes
posst.pathToImage = pathToImage
posst.postID = postID
posst.userID = userID
if let people = post["peopleWhoLike"] as? [String : AnyObject] {
for (_,person) in people {
posst.peopleWhoLike.append(person as! String)
}
}

self.posts.append(posst)
}
}
}

self.collectionview.reloadData()
}
}
})
}
}
}

})
ref.removeAllObservers()
}

func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.posts.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "postCell", for: indexPath) as! PostCell

cell.postImage.downloadImage(from: self.posts[indexPath.row].pathToImage)
cell.authorLabel.text = self.posts[indexPath.row].author
cell.likeLabel.text = "\(self.posts[indexPath.row].likes!) Likes"
cell.postID = self.posts[indexPath.row].postID


for person in self.posts[indexPath.row].peopleWhoLike {
if person == Auth.auth().currentUser!.uid {
cell.likeBtn.isHidden = true
cell.dislikeBtn.isHidden = false
break
}
}

return cell
}

最佳答案

替换这个

ref.child("posts").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snap) in

ref.child("posts").observe(of: .childAdded, with: { (snap) in

能够听到每一个添加的帖子

关于swift - 如何根据添加到 firebase 的信息更新 collectionview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55079395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com