从Firebase获取数据并在PostViewCell中显示

时间:2018-11-27 07:05:03

标签: swift database firebase firebase-realtime-database

我不知道如何将数据从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 个答案:

答案 0 :(得分:1)

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

这是错误的。没有像dict["text":""]这样的东西。首先,您没有任何用于text关键字的数据,其次,您没有编写此:""],可以作为dict [“ text”]进行调用。

我认为您的解决方案是let text = dict["title"] as? String。但是您的体系结构是错误的。您只能声明一个关键字。标题1,标题2错误。您只需要设置标题即可。

答案 1 :(得分:1)

如果您已按照YouTube教程进行操作,则很有可能您没有修改Firebase规则以反映未经身份验证的用户。如果没有,Firebase将忽略每个读/写请求。要启用此功能,请通过以下方式编辑您的Firebase规则:

img

将规则设置为TRUE

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

但是,还有更多。除非您处于测试模式,否则不要这样做。 Google有一些不错的文档:

访问https://firebase.google.com/docs/database/security,以了解有关安全规则的更多信息。

相关问题