Получение сообщений, связанных с конкретным пользователем с Firebase и Swift - PullRequest
1 голос
/ 28 июня 2019

У меня есть фрагмент кода, который извлекает все сообщения из моей базы данных Firebase. Я пытаюсь заставить код тянуть все сообщения для определенного идентификатора пользователя. Структура моей базы данных такова, что с идентификаторами пользователей связан набор идентификаторов записей.

enter image description here

enter image description here

Код, который я должен вытащить на все посты:

DataService.ds.REF_POSTS.observe(.value, with: { (snapshot) in
    self.posts = []
    if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
        for snap in snapshot {
            print("SNAP: \(snap)")
            if let postDict = snap.value as? Dictionary<String, AnyObject> {
                let key = snap.key
                let post = Post(postKey: key, postData: postDict)
                self.posts.append(post)
            }
        }
    }
    self.feedTableView.reloadData()
})

Как мне идентифицировать моего текущего пользователя:

_ = Auth.auth().addStateDidChangeListener { (auth,user) in
            if let user = user {
                let userId = user.uid
                print("USER: \(String(describing: userId))")
                let newPost = DataService.ds.REF_USERS.child("\(userId)").child("posts")
                //print("NEW POST: \(newPost.child)")
                newPost.setValue([userPost : true])

            }
        }

Похоже, мне нужно добраться до дочернего элемента (записей) объекта users, а затем циклически перебирать записи. Как я могу просмотреть (и наблюдать за изменениями) сообщения, связанные с пользователем, вошедшим в систему?

РЕДАКТИРОВАТЬ (Пытаясь просмотреть все сообщения пользователя):

_ = Auth.auth().addStateDidChangeListener { (auth,user) in
    if let user = user {
        let userId = user.uid
        print("USER: \(String(describing: userId))")
        let newPost = DataService.ds.REF_USERS.child("\(userId)").child("posts")
        newPost.observe(.value, with: { (snapshot) in
            self.posts = []
            if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
                for snap in snapshot {
                    print("ERIC SNAP: \(String(describing: snap.value))")
                    if let postDict = snap.value as? Dictionary<String, AnyObject> {
                        let key = snap.key
                        let post = Post(postKey: key, postData: postDict)
                        self.posts.append(post)
                    }
                }
            }
            self.feedTableView.reloadData()
        })
        //print("NEW POST: \(newPost)")

    }
}

1 Ответ

0 голосов
/ 03 июля 2019

Способ получения авторизованных сообщений пользователя осуществляется следующим образом:

guard let uid = Auth.auth().currentUser?.uid else {
            return
        }
        print("USER ID: \(uid)")
        let newPost = DataService.ds.REF_USERS.child("\(uid)").child("posts")

        newPost.observe(.value, with: { (snapshot) in
            self.posts = []
            if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
                for snap in snapshot {
                    let postData = DataService.ds.REF_POSTS.child(snap.key)
                    postData.observe(.value, with: { (snapshot) in
                        if let postDict = snapshot.value as? Dictionary<String, AnyObject> {
                            let key = snapshot.key
                            let post = Post(postKey: key, postData: postDict)
                            self.posts.append(post)
                        }
                        self.feedTableView.reloadData()
                    })
                }
            }

        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...