Удалить значение при перечислении дочернего узла firebase на tableViewCell - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь перечислить всех пользователей из узла firebase в табличном представлении (это работает), но затем хотел бы удалить текущего пользователя из списка (это не работает).

Iя пытался использовать removeValue (), но он все еще работал с текущим пользователем в табличном представлении - также я не хочу удалять пользователя из firebase

Затем я попытался заставить его работать, только еслиuser autoId не равен идентификатору текущего пользователя, но он все равно отображается в ячейке табличного представления

Буду признателен за любую помощь:)

Моя структура 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 ]

1 голос
/ 16 апреля 2019

Вы можете контролировать это в 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)
    }
})
}
1 голос
/ 15 апреля 2019

вместо удаления попробуйте эту модель создания ваших табличных данных, затем создайте пустой массив из них, при извлечении данных добавьте все, кроме того, который имеет тот же currentuser.uid, затем перезагрузите просмотр таблицы, это покажет все данные, кроме текущего пользователя

это код, как было обещано:

но это требует небольшой модификации в вашей базе данных, чтобы ваша база данных была похожа на "users": {"childbyautid": {"fullname": "name", "profileimageurl ":" your 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"}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...