ios - 无法使用 Firebase 检索最近添加的值

标签 ios swift firebase firebase-realtime-database

我的应用程序中有两个 View Controller :第一个显示从 Firebase 数据库中提取的项目,第二个允许用户从数据库添加和删除项目 .

问题是当用户在第二个 View Controller 中添加一个项目并非常快速地返回到第一个 Controller 时。这有时会导致 Firebase 数据库不保存该项目。因此,第一个 View Controller 不会显示新添加的项目。

就植入而言,我在 viewWillAppear 中获取项目,然后在 viewDidDisappear 中删除 Firebase 监听器观察器。我该如何解决这个问题?

// first view controller code

var items = [Item]()

var ref: FIRDatabaseReference!

func fetchItems() {
    ref.child("items").observeSingleEvent(of: .value, with: { (snapshot) in
        self.items = []
        for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
            if let dictionary = child.value as? [String: AnyObject] {
                // Create item and append it to an items array
            }
        }
        self.tableView.reloadData()
    })
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)                
    self.fetchItems()
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    ref.removeAllObservers()
}

最佳答案

您不应该使用 observeSingleEvent,因为您希望每次 firebase 数据库更改时都执行代码。所以,改变它:

func fetchItems() {
ref.child("items").observe(.value, with: { (snapshot) in
    self.items = []
    for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
        if let dictionary = child.value as? [String: AnyObject] {
            // Create item and append it to an items array
        }
    }
    self.tableView.reloadData()
})

这将创建一个监听器。此外,由于之前没有创建观察者,因此不必使用 removeAllObservers()。既然有了,用起来就对了。 希望对您有所帮助!

关于ios - 无法使用 Firebase 检索最近添加的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192323/

相关文章:

ios - ShareKit "SHK.h not found"从 zip 下载

ios - 如何将框架导入到 XCode 项目中?

具有多个 swift 版本和 swift-tools-version 的 Swift 包

javascript - 如何将 key 添加到添加到 Angularfire 2 版本 5 中节点的对象

ios - swift :- How to do the customize report for Crashlytics in Swift

ios - 使用用户默认值来记住隐藏或未隐藏的内容

ios - 从不正确的线程访问的 Realm - Swift 3

swift - AVPlayerViewController 不旋转

ios - 更改标准 UITableview 选择颜色使文本不可见/覆盖文本

java - Android Studio - 错误 : cannot find symbol class FirebaseAuth