setValue()同时创建和删除值

时间:2018-01-29 01:14:23

标签: swift firebase firebase-realtime-database

我们当前有一个按钮,当第一次按下时会添加一个节点,如下所示/ Users / UID / Interests / childByAutoID /“value”,再次按下时会删除节点上的值。第一次单击该按钮时,该值将添加到节点,并在第二次单击时删除该值,但第三次单击会导致同时创建和删除数据库中的值。我似乎无法理解这是我的问题还是firebase的问题。我在下面引用了我的代码:

if(clickedArr[indexPath.row] == false){
            cell.interestsImage.image = selImageArr[indexPath.row]
            ref.child("Users").child(Auth.auth().currentUser!.uid).child("Interests").childByAutoId().setValue(titleArr[indexPath.row])
            clickedArr[indexPath.row] = true
        }
        else{
            ref.child("Users").child(Auth.auth().currentUser!.uid).child("Interests").observe(.childAdded, with: { (snapshot) in
                if(snapshot.value as? String == self.titleArr[indexPath.row]){
                    self.ref.child("Users").child(Auth.auth().currentUser!.uid).child("Interests").child(snapshot.key).removeValue()
                }
            })

2 个答案:

答案 0 :(得分:0)

第一次点击该节点时,您将clickedArr[indexPath.row]切换为true。但是当您第二次点击它时,您不能将其切换到false。你需要这样做。

答案 1 :(得分:0)

您必须解决的第一件事是,在第二次单击按钮时,为添加到感兴趣节点的任何子项实现侦听器。听众做的是在添加它时删除它。除非你像通知观察员一样删除听众,否则听众不会离开。

如果您的节点一次只包含一个值,您可以通过更改添加到仅值的子节点来修复它。