2017-07-16 19 views
0

我有书籍节点和用户节点,用户节点拥有最喜欢的书籍,现在我想获取最喜欢的书籍并显示它们。具有多个键的查询节点firebase iOS/Queryequal以及firebase中的键数组IOS

所以我取就像是获取当前用户>获取最喜欢的书=>现在给列表如何获得使用火力/ firebasui

+0

在一般情况下,这是包括您的火力地堡结构的最佳实践,以及到目前为止的代码你已经尝试为文本。您可以通过Firebase控制台获取您的结构 - >右侧的三个点 - >导出JSON。在你的问题中,你提到想获得最喜欢的书籍并展示它们。哪些最喜欢的书,他们都是?最受欢迎?一位用户书籍?当问题清楚时,它可以帮助我们回答问题。 – Jay

回答

0

我可以修复它这样从书本节点书籍这份名单。直接绑定集合欣赏到喜爱的阵列,然后为每个快照称这本书节点然后配置电池

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 
})! 
+0

这将是有问题的,因为单元格将在Firebase返回数据之前返回;大部分时间细胞将是空白的。代码比互联网快得多,所以* return cell *调用将在观察闭包变化之前执行,以填充单元格。 – Jay

+0

你是对的,有没有其他办法可以解决这个问题? –

+0

是的 - 不要那样做。大声笑。所有开玩笑的人,你应该首先填充你的tableView或collectionView数据源 - 可能在viewDidLoad函数中,然后一旦dataSource(通常是一个数组)完全填充在firebase闭包中,调用tableView.reloadData(),然后将数据从本地数组(dataSource)。如果您想让数据保持活跃状态​​,那么向Firebase中添加观察器以处理.childAdded事件,然后将数据添加到新添加的Firebase数据的dataSource中,然后使用tableView.reloadData()更新UI – Jay

相关问题