如何从firebase中的数组中删除字符串值

时间:2017-08-29 03:14:48

标签: ios arrays swift firebase firebase-realtime-database

我在使用firebase中的其他辅助字符串数组中删除子字符串时遇到问题。当用户创建群聊时,他们包括共享者。这些共享者被添加到一个字符串数组中,然后在制作时添加到firebase。现在,当用户单击离开组聊天按钮时,我无法找到从该阵列中删除当前用户的用户ID的方法,其中我已经检查过他们的uid是否在数组中。我已经尝试了所有我能做的事情,首先我尝试了ref.child(“群聊”).child(groupKey).child(“sharers”)。child(myriad).removeValue,但是没有用,我也试过创建一个没有当前用户ID的新数组,删除旧数组并将新数组添加到firebase,所有都没有用,现在我转向一些同伴编写。如何从firebase中的一组uid中删除当前用户所做的操作。

        let action = UIAlertAction(title: "Leave Group Chat", style: .default, handler: {( alert : UIAlertAction) -> Void in
                let ref = FIRDatabase.database().reference()
                    if let keyp = self.groupChats[indexPath.row].key {

                        ref.child("Group Chats").child(keyp).child("sharers").child(uip).removeValue()



                                              }
                    self.groupChat.removeAll()
                    self.pull()
                    self.pullFromSharers()
                    self.tableViewManage.reloadData()

                })

Firebase

谢谢!

3 个答案:

答案 0 :(得分:2)

与OP讨论后,我们找到了解决方案

问题是您的路径计算不正确,您的路径是获取值而不是子级,因此请按如下方式修改代码:

 ref.child("Group Chats").child(keyp).child("sharers").observe(.value, with: { snapshot in 
    if let sharers = snapshot.value as? [String] { 
    for i in 0..<sharers.count { 
    if sharers[i] == uip { 
      ref.child("Group Chats").child(keyp).child("sharers").child("\(i)").removeValue() 
    } 
    } 
    } 

    })

答案 1 :(得分:0)

我在angularjs中使用了这个简单的方法。我想你也需要同样的东西。试试这个会对你有帮助。

var url = "your db path is here"
var dataObj = {'sharers':''};
   ref(url).set(dataObj).then(function(res) {
      console.log("response:- ",res);
   });

答案 2 :(得分:0)

一种方法是通过设置为nil来删除整个节点,就像我在评论中说的那样,然后将节点设置回父节点。请查看这篇文章以及firebase数组。

  

https://stackoverflow.com/a/40657455/5123516