我正在使用Firebase为客户端创建网络应用程序。对于每个用户,我向其Firebase属性timestamp
添加一个观察者,这意味着当用户上传状态更新时,Firebase观察者会被触发,以便Feed中的用户单元格移动到顶部(每个用户只有一个单元格) 。这是Firebase代码:
Database.database().reference().child(forUser.userID).child("timestamp").observe(.value) { (snapshot) in
if let timestamp = snapshot.value as? Int {
if let cell = self.feedCollectionView.cellForItem(at: indexPath) as? FeedCell {
self.feedCollectionView.moveItem(at: indexPath, to: IndexPath(row: 0, section: 0))
}
}
}
虽然很可能我有100-200个用户,也许最后一个用户更新了他的状态并且必须被移到顶部,即使他的集合视图单元格从未被加载过。
当我运行它时,它为每个可移动的可见单元打印,并为每个不可见的单元打印它无法访问卸载的单元。
如何访问从未加载过的单元格并将其移至顶部?
您应该通过在时间戳上对其进行排序来更新collectionview的数据源,而不是移动可能加载或未加载的单元格。然后你可以调用self.feedCollectionView.reloadData(),它会自动将它放在顶部。