【问题标题】:Fetching Firebase data by Array通过数组获取 Firebase 数据
【发布时间】:2017-11-23 23:51:22
【问题描述】:

我只想获取数组中的 postkeys 的帖子。我已经尝试使用下面的代码及其一些变体,但它不起作用。有人知道怎么做吗?

func fetchData(){

    DataService.ds.REF_POSTS.queryEqual(toValue: postKeys[IndexPath]).observeSingleEvent(of: .value, with: { (snapshot) in
        if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
            for snap in snapshot {
                print("SNAP: \(snap)")
                if let postDict = snap.value as? Dictionary<String, Any>{
                    let key = snap.key
                    let post = Post.init(postKey: key, postData: postDict)
                    self.posts.append(post)
                    print("USERPST: \(self.posts)")
                }
            }
        }
        self.posts.reverse()
        self.tableView.reloadData()
    })
}

【问题讨论】:

  • postKeys[IndexPath] 的值是多少?当你用硬编码值替换它时,你能重现问题吗?
  • postKeys[IndexPath] 的值是字符串数组(它包含 post 键)。它不适用于硬编码数组,但它可以很好地从 DataService.ds.REF_POSTS 获取所有帖子。这里的问题是我只想要数组中特定键的特定帖子。
  • 无法将 ID 列表传递给 Firebase 并检索这些 ID 的项目。见stackoverflow.com/questions/29560088/…

标签: arrays swift firebase firebase-realtime-database


【解决方案1】:

我的代码有点不对劲。我想通了:

    func fetchData(){
    DataService.ds.REF_POSTS.observeSingleEvent(of: .value, with: { (snapshot) in
        for key in self.postKeys{
            if let postDict = snapshot.childSnapshot(forPath: key).value as? Dictionary<String, Any>{
                print("SNAP: \(postDict)")
                    let post = Post.init(postKey: key, postData: postDict)
                    self.posts.append(post)
                }
        self.posts.reverse()
        self.tableView.reloadData()
        }
    })

}

【讨论】:

  • 此代码下载REF_POSTS下的所有数据,然后过滤客户端。这使用了比需要更多的带宽。
  • 您有什么建议吗?
  • 如果所有 ID 都在一个范围内,您可以使用范围过滤器(即 queryStartingAtValue()queryEndingAtValue())。但更有可能的是,您需要单独加载每个项目。虽然代码密集,但并不像您想象的那么慢,因为 Firebase 对请求进行管道传输。见stackoverflow.com/questions/35931526/…
猜你喜欢
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
相关资源
最近更新 更多