正在跳过queryEqualTo

时间:2017-06-27 18:08:10

标签: ios swift firebase firebase-realtime-database

我正在尝试为我的应用设置一个viewCount,当我设置断点并通过代码时,它总是跳过queryOrdered并且我不确定为什么

func increaseViewCount(username: String, time: NSNumber){
    guard let uid = Auth.auth().currentUser?.uid else{
        return
    }
    let refOfUserName = Database.database().reference().child("Users").child(uid)
    refOfUserName.observeSingleEvent(of: .value, with: {(snapshot) in
        let dictionaryOfUser = snapshot.value as? [String: AnyObject]
       // let currentUsersName = dictionaryOfUser?["username"] as? String
    let currentUsersName = "hello"

        if username == currentUsersName {
            print("this is the same user")

        }else{

            let postRef = Database.database().reference().child("HistoryOfPosts").child("post")
            postRef.queryOrdered(byChild: "post").queryEqual(toValue: time).observeSingleEvent(of: .childAdded, with: {(snapshotPost) in

                print(snapshotPost.exists())
                print(snapshotPost)

                let valString = snapshotPost.value
                let number = valString as! NSNumber
                var value = number.intValue
                value = value + 1
                let values = ["viewCount": value] as [String:Any]
                postRef.updateChildValues(values)

            })
        }
    })
}

1 个答案:

答案 0 :(得分:1)

数据是从Firebase数据库异步加载的。在附加观察者之后,程序继续使用语句,而不是等待该加载完成。

在这种情况下,这意味着代码在附加观察者之后几乎完全退出increaseViewCount()。然后,一旦从Firebase服务器返回数据,就会执行回调块中的代码。

要将转换为回调块,请在该块中的第一个语句上放置一个断点。