从Firebase获取数据并将其作为帖子显示在TableViewCell中

4

我不知道如何从Firebase获取数据并将其显示在UITableView中。我看过的所有教程都使用了Firebase身份验证,在他们的视频中,一切都很顺利,但是当我尝试复制它时,我失败了。 以下是我尝试过的内容:

首先是我的数据库结构:

Firebase Database structure

这是我的代码:

func observePosts(){
    let postsRef = Database.database().reference().child("posts")
    postsRef.observe(.value, with: { snapshot in

        var tempPosts = [Post]()

        for child in snapshot.children {
            if let childSnapshot = child as? DataSnapshot,
            let dict = childSnapshot.value as? [String:Any],
            let text = dict["text":""] as? String
            {
                let post = Post(text: text)
                tempPosts.append(post)
            }
        }

        self.posts = tempPosts
        self.tableView.reloadData()
    })
}

所以我的问题是:如何从像这样的数据库结构中获取消息?
2个回答

1
let text = dict["text":""] as? String {
   let post = Post(text: text)
   tempPosts.append(post) }

这是错误的。不存在类似于 dict["text":""] 的东西。首先,没有文本关键字的任何数据;其次,您不应该写成 :""] ,而应该像这样调用 dict["text"]。
我认为您的解决方案是 let text = dict["title"] as? String。但是,您的架构有问题。您只能声明一个关键字。 title1,title2 是错误的。您必须只设置标题。

我的想法实际上是将标题和消息作为键值对。因为它们总是在一起的。所以标题总是不同的。我不能这样做吗? - Thomas22
不要更改键的名称!就像codeBy所说,您不应该使用多个名称声明一个键! 每个子元素都应该有一个单独的关键字,可以根据需要更改其值;不能像您所做的那样创建关键字。 - Francesco Destino

1

如果您遵循了YouTube教程,那么您很有可能没有修改Firebase规则以反映非身份验证用户。如果您没有这样做,Firebase将忽略每个读/写请求。要启用此功能,请通过以下方式编辑Firebase规则:

img

将规则设置为TRUE

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

然而,这还不够。除非你处于测试模式,否则不要这样做。Google有一些很好的文档介绍此事:访问https://firebase.google.com/docs/database/security 了解更多安全规则信息。

我现在知道了。那是我早期问题的答案:D - Thomas22
我可以为未来的访客保留它吗? :3 - excitedmicrobe
1
在我苦苦挣扎的时候...拜托了!没有人应该像疯子一样查看他的代码,并在数据库规则中找到答案 :P - Thomas22

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接