我有书籍节点和用户节点,用户节点拥有最喜欢的书籍,现在我想获取最喜欢的书籍并显示它们。具有多个键的查询节点firebase iOS/Queryequal以及firebase中的键数组IOS
所以我取就像是获取当前用户>获取最喜欢的书=>现在给列表如何获得使用火力/ firebasui
我有书籍节点和用户节点,用户节点拥有最喜欢的书籍,现在我想获取最喜欢的书籍并显示它们。具有多个键的查询节点firebase iOS/Queryequal以及firebase中的键数组IOS
所以我取就像是获取当前用户>获取最喜欢的书=>现在给列表如何获得使用火力/ firebasui
我可以修复它这样从书本节点书籍这份名单。直接绑定集合欣赏到喜爱的阵列,然后为每个快照称这本书节点然后配置电池
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 *调用将在观察闭包变化之前执行,以填充单元格。 – Jay
你是对的,有没有其他办法可以解决这个问题? –
是的 - 不要那样做。大声笑。所有开玩笑的人,你应该首先填充你的tableView或collectionView数据源 - 可能在viewDidLoad函数中,然后一旦dataSource(通常是一个数组)完全填充在firebase闭包中,调用tableView.reloadData(),然后将数据从本地数组(dataSource)。如果您想让数据保持活跃状态,那么向Firebase中添加观察器以处理.childAdded事件,然后将数据添加到新添加的Firebase数据的dataSource中,然后使用tableView.reloadData()更新UI – Jay
在一般情况下,这是包括您的火力地堡结构的最佳实践,以及到目前为止的代码你已经尝试为文本。您可以通过Firebase控制台获取您的结构 - >右侧的三个点 - >导出JSON。在你的问题中,你提到想获得最喜欢的书籍并展示它们。哪些最喜欢的书,他们都是?最受欢迎?一位用户书籍?当问题清楚时,它可以帮助我们回答问题。 – Jay