ios - 无法从数据库中检索评论 (FIREBASE/IOS)

标签 ios swift firebase firebase-realtime-database

我现在有点头疼,因为我似乎无法弄清楚为什么我的代码没有正确地从数据库加载评论,它正在接收来自数据库 (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

如果需要任何进一步的信息,请询问,我会提供,我只提供了我认为必要的信息,而且我很确定这是因为我从数据库中检索数据的方式。

编辑

经过一番尝试,我设法从第二次数据库调用中获得某种输出,它检索评论数据库中的键,这与评论数据库中的键相同,但是,该值返回 null .

    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

我似乎已经解决了我的问题,我在下面发布了详细说明,说明问题是如何发生的,是什么原因导致的,以及我在解决问题后使用的代码

最佳答案

所以看起来这个问题就像我想的那样简单得可笑,但是,在它滑过我的头之前并没有真正使用过 firebase,无论如何在查看数据库的 firebase 控制台后我注意到评论会显示因为这个 https://已编辑/comments/-L_sWQI70PogYAtwjla4 在数据库中,仔细查看后您可以看到评论的 ID 以连字符开头,但是在数据库中查看它本身而不查看 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
            }
        })
    })
}

关于ios - 无法从数据库中检索评论 (FIREBASE/IOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55154680/

相关文章:

ios - 将文件从 Google Drive 共享到 Dropbox,反之亦然

javascript - 由于唯一的 id 容器,无法检查 Firebase 中是否存在数据

mysql - String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 的大小是多少?

ios - 在 ARC 应用程序中包含非 ARC 库?

iOS 使 UITableViewCell 中的 UIPickerView 适合一行

ios - 输入处理 iOS 设置页面

swift - TableView每隔一个单元格一种颜色

每次页面重新启动时,Firebase.auth().currentUser 都会变为 null

javascript - HTML 的 'onclick' 是否适用于移动设备?

ios - 向上/向下滚动时 UICollectionViewCell 内容发生变化