如何停止观察

时间:2018-01-24 20:46:21

标签: swift firebase firebase-realtime-database

我有这段代码用于从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()
                }
            }
        }
    }
})

1 个答案:

答案 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()
}