当前位置:  开发笔记 > IOS > 正文

没有结果时,Firebase查询不会调用阻止

如何解决《没有结果时,Firebase查询不会调用阻止》经验,为你挑选了1个好方法。

我正在使用Firebase,我想查询是否存在某些内容.找到值时会调用它,但在找不到任何内容时不会调用该块.这是预期的行为吗?

    ref.queryOrderedByKey().queryEqualToValue(channelName).observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in
        print("found channel:  \(snapshot.key)")
        }, withCancelBlock: { error in
        print(error.description)
    })

我做错了什么吗?谢谢



1> Jay..:

要检查没有数据(snapshot == NULL),就这样做了

    let refToCheck = myRootRef.childByAppendingPath(channelNameString)
    refToCheck.observeEventType(.Value, withBlock: { snapshot in
        if snapshot.value is NSNull {
            print("snapshot was NULL")
        } else {
            print(snapshot)
        }
    })

与.observeEventType相比,查询非常繁重,因为您已经知道要检查的特定路径,它将执行得更好.

编辑:你也可以使用

if snapshot.exists() { ... }

当您要检索包含特定值或一系列值的子节点时,最好使用Firebase查询.

编辑Firebase 3.x和Swift 3.x.

    let refToCheck = myRootRef.child(channelNameString)
    refToCheck.observe(.value, with: { snapshot in
        if snapshot.exists() {
            print("found the node")
        } else {
            print("node doesn't exist")
        }
    })

注1)逻辑有点改变,因为我们现在利用.exists来测试是否存在快照.注2)此代码会使一个观察者在Firebase中处于活动状态,因此如果稍后创建该节点,它将会触发.

如果要检查节点并且不想让观察者注意该节点,请执行以下操作:

    let refToCheck = myRootRef.child(channelNameString)
    refToCheck.observeSingleEvent(of: .value, with: { snapshot in
        if snapshot.exists() {
            print("found the node")
        } else {
            print("node doesn't exist")
        }
    })

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有