在tableViewCell上列出Firebase子节点时删除值

时间:2019-04-15 18:06:40

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

我正在尝试在表视图中列出Firebase节点中的所有用户(这是可行的),但随后想从列表中删除当前用户(这是不可行的)。

我尝试使用removeValue(),但它仍与当前用户一起在表视图上运行-我也不想从firebase中删除该用户

然后我尝试仅在用户autoId不等于当前用户ID时仍然运行它,但它仍显示在表格视图单元格中

不胜感激:)

我的firebase结构如下:

"users" : {
   "8x1SGi2P0KVOKm4i60JQLP1bdU63" : {
     "fullname" : "bbbb",
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/pinion-4896b.appspot.com/o/profile_image%2F8x1SGi2P0KVOKm4i60JQLP1bdU63?alt=media&token=7932b14f-c2d8-46fd-9dd1-c607217fe8d3",
   },
   "B7rwHiCTlphZjKXfPSEzkIwl8RH2" : {
     "fullname" : "Aaaa ",
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/pinion-4896b.appspot.com/o/profile_image%2FB7rwHiCTlphZjKXfPSEzkIwl8RH2?alt=media&token=072e1f41-935e-430d-af99-dc640381f8e6",
   },
   "FRuuk20CHrhNlYIBmgN4TTz3Cxn1" : {
     "fullname" : "eeee",
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/pinion-4896b.appspot.com/o/profile_image%2FFRuuk20CHrhNlYIBmgN4TTz3Cxn1?alt=media&token=bf89b903-a51a-4d6d-bdef-fe2667d78842",
   },

列出用户的代码:

func observeUsers(completion: @escaping (UserModel) -> Void) {
    REF_USERS.observeSingleEvent(of: .childAdded, with: { snapshot in
        if let dict = snapshot.value as? [String: Any] {
            let user = UserModel.transformUser(dict: dict, key: snapshot.key)

            //line below used first to remove value from listing on table view
            //Api.User.REF_USERS.child("users").child(Api.User.CURRENT_USER!.uid).removeValue()

            //line below - if user autoID is not equal to the current user then list
            if user.id != Api.User.CURRENT_USER?.uid {
                completion(user)
            }
        }
    })
}

编辑:

func loadUsers() {

    var allUsers = [String]()

    Api.User.REF_USERS.observe(.value, with: { snapshot in
        for child in snapshot.children { //build the array of keys
            let snap = child as! DataSnapshot
            let key = snap.key
            allUsers.append(key)
            print(allUsers)
        }
    })
}

2 个答案:

答案 0 :(得分:1)

而不是删除尝试此 创建表数据模型 然后创建一个空数组 在获取数据时,除了具有相同currentuser.uid的内容外,全部附加 然后重新加载tableview,这将显示除当前用户外的所有数据

这是所承诺的代码:

但这需要在数据库中进行一些修改 使您的数据库像这样 “用户”:{         “ childbyautid”:{                        “ fullname”:“名称”,                        “ profileimageurl”:“您的网址”,                        “ userid”:“ userid” }

那么你可以这样写

var myArr = [String]()
Database.database().reference.child("users").observe(.value){(snapshot) in
if snapshot.childcount > 1 { self.myArr.removeAll()
for data in snapshot.children.allObjects as! [DataSnapshot]{
if let d = data.value as? [string: any]{
if Auth.auth.currentuser.uid != d["userid"]{
myArr.append(d["name"]}else{print("this is the user itself"}}}

答案 1 :(得分:1)

您可以通过添加如下所示的userId检查来在loadUsers中进行控制

func loadUsers() {
var allUsers = [String]()
Api.User.REF_USERS.observe(.value, with: { snapshot in
    for child in snapshot.children { //build the array of keys
        let snap = child as! DataSnapshot
        let key = snap.key
if key != currentUser.id{
        allUsers.append(key)
}
        print(allUsers)
    }
})
}