【问题标题】:iOS callback if firebase query doesn't run (Swift Firebase)如果 firebase 查询没有运行,iOS 回调(Swift Firebase)
【发布时间】:2018-02-11 11:54:17
【问题描述】:

我正在运行一个查询来检查我数据库中某个位置的 .childAdded。

找到数据时它运行良好,但是,如果该位置没有数据,它就无法触发查询,因此这个不允许让我使用snapshot.exists,因为它甚至不运行查询。

这是我当前的代码

let favouriteRef = self.databaseRef.child("users").child(userID!).child("Favourites")

// Code doesn't run past this line when no data at location
favouriteRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in

        let favouriteID = "\(snapshot.value!)"
        let usersRef = self.databaseRef.child("users")

        usersRef.observeSingleEvent(of: .value, with: { (users) in

            for user in users.children {
                let favCleaner = UserClass(snapshot: user as! DataSnapshot)

                if favouriteID == favCleaner.uid {
                    tempFav.append(favCleaner)
                }
            }
            self.hasFavourites = true
            self.tableView.reloadData()
            self.usersArray = tempFav
            self.collectionView.reloadData()
        })
    })

如果查询未运行(位置无数据),我想找到一种接收回调的方法

谢谢。

【问题讨论】:

    标签: ios json swift firebase snapshot


    【解决方案1】:

    如果该位置绝对没有数据,那么显然此事件触发器不足以让您获取数据,因为此事件仅在添加某些内容时才会触发。 所以你有两个选择

    1. 添加另一个.observeSingleEvent(of: .value, with: { (snapshot) in // Get the values and write the relevant actions } 类型的触发器
    2. 或者您可以更新此事件以键入.observe(.value, with: {snapshot in // write the relevant code }

    这两种方法都有其优点和缺点。 第一种方法需要您编写更多代码,同时尽量减少从数据库到 UI 的触发器数量。在第二种方法中,UI 会有更多的触发器,但它可以相当容易编码。

    据我所知,您首先尝试确定数据库的favorite 节点中是否存在数据,然后将其与另一个snapshot 进行比较。因此,如果删除或更新事件的数量相对较少,我的建议是采用方法二。

    【讨论】:

    • 谢谢,我已经用第二个选项修改了我的代码,它按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多