Не удается получить комментарии из базы данных (FIREBASE / IOS) - PullRequest
2 голосов
/ 14 марта 2019

В данный момент я немного ломаю голову, потому что не могу понять причину, по которой мой код не загружает комментарии из базы данных должным образом. Он получает идентификаторы для каждого комментария для сообщения из сообщения. база данных (post_comments), но не может получить какие-либо данные?

    func loadComments() {
    let postCommentRef = Database.database().reference().child("post_comments").child("6AECB02A-CC97-4ECB-8A09-702E254D4CCD")
    postCommentRef.observe(.childAdded, with: {
        snapshot in
        print("snapshot key")
        print(snapshot.key)
        Database.database().reference().child("comments").child(snapshot.key).observeSingleEvent(of: .value, with: {
            snapshotComment in
            //print(snapshotComment.value!)
            if let dict = snapshotComment.value as? [String : Any] {
                let newComment = Comment().transformComment(dict: dict)
                self.fetchUser(uid: newComment.uid!, completed: {
                    self.comments.append(newComment)
                    self.tableView.reloadData()
                    print(newComment) <- trying to retrive data, I've posted below what the output of this is.
                })
                //let photoUrlString = dict["photoUrl"] as! String
            }
            })
    })
}

в моем коде вы можете видеть, что я поместил небольшую функцию печати, чтобы увидеть, какие данные выдает код, вот вывод из журнала отладки.

snapshot key
L_sWOp0w1V8DaGSK7iK
snapshot key
L_sWQI70PogYAtwjla4
snapshot key
hello <-- this is a test uid I created in the DB, treat it like any other key listed above.

Как вы можете видеть, результат функции loadComments() не дает много.

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

Database

если требуется какая-либо дополнительная информация, пожалуйста, спросите, и я предоставлю ее, я предоставил только то, что считаю необходимым, и я почти уверен, что это связано с тем, как я получаю данные из базы данных.

EDIT

После некоторой игры мне удалось получить какой-то вывод от второго вызова базы данных, который извлекает ключ в базе данных комментариев, который является теми же двумя, что и в базе данных комментариев, однако значение возвращает ноль .

    func loadComments() {
    let postCommentRef = Database.database().reference().child("post_comments").child("6AECB02A-CC97-4ECB-8A09-702E254D4CCD")
    postCommentRef.observe(.childAdded, with: {
        snapshot in
        print(snapshot.key)
        Database.database().reference().child("comments").child(snapshot.key).observeSingleEvent(of: .value, with: { (snapshotComment) in
            print("Snapshot value")
            print(snapshotComment.value)
            print("Snapshot.key")
            print(snapshotComment.key)
            //print(snapshotComment.value!)
            //if let dict = snapshotComment.value as? [String : Any] {
            //    let newComment = Comment().transformComment(dict: dict)
            //    self.fetchUser(uid: newComment.uid!, completed: {
            //        self.comments.append(newComment)
            //        self.tableView.reloadData()
            //        print(newComment)
            //    })
                //let photoUrlString = dict["photoUrl"] as! String
            })
        })
    }

Результат этого кода выглядит следующим образом ..

L_sWOp0w1V8DaGSK7iK <-- these two come from the snapshot.key for post_comments
L_sWQI70PogYAtwjla4 <---^
Snapshot value
Optional(<null>)
Snapshot.key
L_sWOp0w1V8DaGSK7iK
Snapshot value
Optional(<null>)
Snapshot.key
L_sWQI70PogYAtwjla4

Я собираюсь развеять свои надежды и попытаться выяснить источник этой проблемы, если никто не может дать ответ на этот вопрос, я надеюсь, что смогу найти способ ответить на него сам, поскольку я верю, что Структура базы данных, которую я пытаюсь создать, намного эффективнее и обеспечивает лучший пользовательский опыт, если я ошибаюсь, я бы хотел знать лучший способ:)

РЕДАКТИРОВАТЬ # 2

Кажется, я решил свою проблему, ниже я опубликовал подробное описание того, как и что вызывало проблему, а также код, который я использую после решения проблемы

1 Ответ

1 голос
/ 15 марта 2019

Так что, похоже, проблема была в чем-то нелепо простом, как я и думал, однако, на самом деле я не работал с firebase до того, как он упал прямо мне на голову, во всяком случае после того, как я посмотрел на консоль firebase в базе данных, я заметил, что комментарии покажут как это https://REDACTED/comments/-L_sWQI70PogYAtwjla4 в базе данных, после тщательного изучения вы можете увидеть, что идентификатор комментария начинается с дефиса, но поиск в базе данных сам по себе, не глядя на URL, фактически не выявит этого, поэтому мне удалось решить эту проблему с помощью около 4 символов следующим образом

Database.database().reference().child("comments").child("-" + snapshot.key).observeSingleEvent(of: .value, with: {

Как вы можете видеть, 4 символа, о которых я говорю, это "-" = , который добавляет дефис к запросу базы данных и возвращает правильные значения; Я не уверен, что это лучший способ, но он работает, поэтому я счастлив!

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

    func loadComments() {
    let postCommentRef = Database.database().reference().child("post_comments").child("6AECB02A-CC97-4ECB-8A09-702E254D4CCD")
    postCommentRef.observe(.childAdded, with: {
        snapshot in
        print("snapshot key")
        print(snapshot.key)
        Database.database().reference().child("comments").child("-" + snapshot.key).observeSingleEvent(of: .value, with: {
            snapshotComment in
            //print(snapshotComment.value!)
            if let dict = snapshotComment.value as? [String : Any] {
                let newComment = Comment().transformComment(dict: dict)
                self.fetchUser(uid: newComment.uid!, completed: {
                    self.comments.append(newComment)
                    self.tableView.reloadData()
                    print(newComment)
                })
                //let photoUrlString = dict["photoUrl"] as! String
            }
        })
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...