我正在从NoSQL Firebase数据库中读取数据,将数据解析为单个组件,然后在我的tableView中显示它们。我添加了表刷新功能,因此当添加新数据时,用户可以刷新并将其添加到表中。
刷新表的函数与初始表填充的函数相同,所以在某种意义上刷新只是重新启动视图。采取的步骤是:
这是完整的功能:
func readEventsFromDb() {
// 1. Empty out data structures
eventsForDate.removeAll()
allDates.removeAll()
// 2. Fetch data
let dbRef = FIRDatabase.database().reference().child("pets").child(currentPet).child("events")
dbRef.observeSingleEvent(of: .value, with: { snapshot in
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
// 3. Parse data elements
for child in snapshots{
if let data = child.value as? [String: Any] {
if let c = data["comment"] as? String, let p = data["user"] as? String, let t = data["type"] as? Int, let d = data["date"] as? UInt64 {
let event = PetEvent(comment: c, person: p, type: t, time: self.timeFromEpoch(time: Double(d)))
let eventDate = self.dateFromEpoch(time: Double(d))
if (self.eventsForDate[eventDate] != nil) {
self.eventsForDate[eventDate]!.append(event)
} else {
self.eventsForDate[eventDate] = [event]
}
}
}
}
// 4. Refresh table
self.allDates = Array(self.eventsForDate.keys)
self.feedTable.reloadData()
self.refreshControl.endRefreshing()
}
})
}
对我而言,刷新表几乎只是重新启动视图并不是很有意义,因为这是视图中唯一的东西。这是表刷新通常如何工作或是否有更有效的方法来做这样的事情?
答案 0 :(得分:2)
使用ref.observe
代替ref.observeSingleEvent
来持续更新表格视图。
ref.observe(.childAdded ...) //insert row
ref.observe(.childRemoved ...) //remove row
ref.observe(.childChanged ...) //update row