发现在Swift中更新firebase中的值很困难

时间:2017-03-07 07:30:32

标签: ios firebase swift3 firebase-realtime-database

我的Firebase数据库看起来像这样

enter image description here

我在这里得到一个字段名称 user_post 。然后我使用 childByAutoId()添加新帖子。然后在里面我根据 postId 插入帖子。现在我想更新喜欢并添加新字段 peopleWhoLike 。有人可以告诉我如何插入更新任何特定帖子的值。顺序是 user_post > childByAutoId()>的帖子ID

这是我的代码:

 let keyToPost = ref.child("user_post").childByAutoId().key

 ref.child("user_post").queryOrdered(byChild: self.postID).observeSingleEvent(of: .value, with: { (snapshot) in

        if (snapshot.value as? [String : AnyObject]) != nil {

            let updateLikes: [String : Any] = ["peopleWhoLike/\(keyToPost)" : FIRAuth.auth()!.currentUser!.uid]

            ref.child("user_post").child(self.postID).updateChildValues(updateLikes, withCompletionBlock: { (error, reff) in

                if error == nil {
                    ref.child("user_post").child(self.postID).observeSingleEvent(of: .value, with: { (snap) in
                        if let properties = snap.value as? [String : AnyObject] {
                            if let likes = properties["peopleWhoLike"] as? [String : AnyObject] {
                                let count = likes.count

                                let update = ["Like" : count]
                                ref.child("user_post").child(self.postID).updateChildValues(update)

                                self.likeBtn.isHidden = true
                                self.unlikeBtn.isHidden = false
                                self.likeBtn.isEnabled = true
                            }
                        }
                    })
                }
            })

        }//xxx


    })

    ref.removeAllObservers()

1 个答案:

答案 0 :(得分:3)

以下是一次更新一个值的方法,例如

let ref : FIRDatabaseReference!
    ref = FIRDatabase.database().reference()
    ref.child("yourNode").child("subNode").updateChildValues(["yourKey": yourValue])

我所做的就是把钥匙写到我的帖子上。在创建帖子时,取了childByAutoID并将其添加到post数据中,以便稍后引用它。我会把它作为" key"并且值将是childByAutoId字符串。一旦我有了这把钥匙,我就可以像这样添加一个像

点击

ref.child("yourNode").child(postKey).updateChildValues(["key": yourValue])

您可以在根目录中创建一个名为" Likes"每当用户喜欢或不喜欢它时,它将使用postKey并在Likes节点下创建一个子节点,然后添加userId。当帖子加载时,你会进入Likes节点并匹配帖子,然后检查用户喜欢与否。

likes example

这里我有用户观察列表,但它可能和喜欢的一样。在我的应用程序中,当用户保存帖子时。我在监视列表下记录userId,在userId中记录了保存的postId。这可能与喜欢类似。然后我只是比较,看看是否有匹配。