繁体   English   中英

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

[英]Remove value when listing firebase child node on tableViewCell

我正在尝试在表视图中列出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)
        }
    })
}

而不是删除尝试使用此表数据的创建模型,然后在获取数据时为其创建一个空数组,将所有具有相同currentuser.uid的文件添加到表中,然后重新加载表视图,这将显示除当前用户外的所有数据

这是所承诺的代码:

但这需要对数据库进行一些修改,使数据库像这样的“用户”:{“ childbyautid”:{“ fullname”:“ name”,“ profileimageurl”:“您的url”,“ 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"}}}

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

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)
    }
})
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM