gpt4 book ai didi

swift - Firestore addSnapshotListener 在新对象进入时替换对象数据

转载 作者:行者123 更新时间:2023-11-28 07:52:03 26 4
gpt4 key购买 nike

我有以下功能;

func observePosts() {
let postReference = Firestore.firestore().collection("Posts").limit(to: 20).order(by: "postTimestamp", descending: true)
postReference.addSnapshotListener { (snapshot, error) in
if error != nil {
print(error as Any)
return
} else {
guard let snapshot = snapshot else { return }
let models = snapshot.documents.flatMap({Post(dictionary: $0.data())})
self.posts = models
DispatchQueue.main.async {
self.feedCollection.reloadData()
}
}
}
}

这将返回集合下的所有文档。

但是,当我按照以下添加另一个对象时;

uploadMedia { (url) in
if url != nil {
let postIDReference = self.postsReference.collection("Posts").document().documentID
self.postsReference.collection("Posts").document().setData([
"postID" : postIDReference,
"postImageURL" : url!,
"postTimestamp" : 1234567890
], completion: { (error) in
if error != nil {
print(error as Any)
return
} else {
picker.dismiss(animated: true, completion: nil)
}
})
}
}
}

这会用新的 setData 对象覆盖一个单元格。我在 SO 上读过一些类似的问题,但大多数与没有自动 ID key 有关

self.postsReference.collection("Posts").document().setData(

给我。

我尝试过的:

终止应用程序并重新打开会给我 Firestore 中的所有对象。Firestore 仪表板包含所有对象(因此不存在丢失数据的问题)。

这是我的委托(delegate)和数据源方法

    extension FeedController: UICollectionViewDelegate, UICollectionViewDataSource 
{

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

func collectionView(_ collectionView: UICollectionView, cellForItemAt
indexPath: IndexPath) -> UICollectionViewCell {
let feedCell = feedCollection.dequeueReusableCell(withReuseIdentifier:
"cell", for: indexPath) as! PostCell
let post = posts[indexPath.item]
feedCell.post = post
return feedCell
}
}

CollectionView 单元格

import UIKit
import SDWebImage

class PostCell: UICollectionViewCell {

@IBOutlet weak var postImage: UIImageView!

var post: Post? {
didSet {
guard let post = post else { return }
let postImageURL: URL = URL(string: (post.postImageURL))!
postImage.sd_setImage(with: postImageURL) { (image, error, cache, url)
in
self.postImage.image = image
}
}
}
}

感谢任何帮助 - 一如既往的感谢。

最佳答案

问题是我的自定义 flowLayout。我相信我需要在检索新项目时使布局无效。

关于swift - Firestore addSnapshotListener 在新对象进入时替换对象数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49380164/

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