我有这段代码用于从Firebase数据库中检索数据。代码工作正常,但它多次检索相同的数据。
如何停止观察,以便只调用一次数据
我的代码
self.eventGalleryImage.child("event")
.child(self.eventName.text!)
.child("EventImages")
.observeSingleEvent(of: .value, with: { (snapshot) in
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for child in snapshots {
if let dict = child.value as? Dictionary<String, Any> {
if let userGallery = dict["Text"] as? String {
self.postsFindGallery.insert(galleryStruct(gallery: userGallery), at: 0)
self.collectionView.reloadData()
}
}
}
}
})
答案 0 :(得分:0)
要吸取的教训。尽量避免在观察数据时使用for循环。这是您需要做的事情,以获取该数据库路径中的所有数据ONCE:
self.eventGalleryImage.child("event")
.child(self.eventName.text!)
.child("EventImages")
.observe(.childAdded, with: { (snapshot) in
guard let dictionary = snapshot.value as? [String: AnyObject] else { return }
if let userGallery = dictionary["Text"] as? String {
self.postsFindGallery.insert(galleryStruct(gallery: userGallery), at: 0)
self.collectionView.reloadData()
}
}, withCancel: nil)
您可能还想尝试:
DispatchQueue.main.async {
self.collectionView.reloadData()
}