【问题标题】:Query node with multiple keys firebase iOS / Queryequal with array of key in firebase IOS具有多个键的查询节点 firebase iOS / Queryequal 与 Firebase IOS 中的键数组
【发布时间】:2017-12-21 06:43:27
【问题描述】:

我有书籍节点和用户节点,用户节点有喜欢的书籍,现在我想获取喜欢的书籍并显示它们。

所以我的获取就像获取当前用户->获取最喜欢的书籍 => 现在给出列表如何使用 firebase/firebasui 从书籍节点获取此书籍列表

【问题讨论】:

  • 一般来说,最好的做法是包含您的 Firebase 结构以及您尝试过的代码作为文本。您可以通过 Firebase 控制台->右侧的三个点->导出 JSON 来获取您的结构。在您的问题中,您提到想要获得最喜欢的书籍并展示它们。最喜欢的书,全部?最受欢迎?一个用户的书?当问题明确时,它可以帮助我们回答。

标签: ios firebase firebase-realtime-database firebaseui


【解决方案1】:

我可以这样解决。将集合视图直接绑定到收藏夹数组,然后为每个快照调用 book 节点,然后配置单元格

let ref = firebaseRef?.child("users").child(userUid!).child("FavBooks").queryOrderedByKey()

self.datasrc = (savedCollectionView?.bind(to: ref!){ collectionView, IndexPath, snap in
   let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: IndexPath)

  let bookRef = self.firebaseRef?.child("Books").child(snap.key).queryOrderedByKey()
  bookRef?.observeSingleEvent(of: .value, with: {(snapshot) in
  //configure cell
  })
  return cell
})!

【讨论】:

  • 这会有问题,因为单元格会在数据从 Firebase 返回之前返回;大多数情况下,单元格将是空白的。代码比互联网快得多,因此 return cell 调用将在观察闭包发生更改以填充单元格之前执行。
  • 你是对的,有没有其他方法可以解决这个问题?
  • 是的 - 不要那样做。哈哈。除了开玩笑,您应该首先填充您的 tableView 或 collectionView 数据源 - 可能在 viewDidLoad 函数中,然后一旦数据源(通常是一个数组)在 firebase 闭包中完全填充,调用 tableView.reloadData() 然后从本地数组(数据源)。如果你想让你的数据保持活跃,为 .childAdded 事件添加观察者到 Firebase 会依次从新添加的 Firebase 数据中添加数据到 dataSource,然后 tableView.reloadData() 来更新 UI
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 2023-03-25
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多