我有一个要在表格中显示的对象列表。我使用Firebase
,这使我可以监控特定的数据列表,并在列表更改时收到通知。
我有一个PersonViewController
类,其UITableView
并且具有people
属性,用于容纳我想要显示的对象列表:
var people: [Person] = []
我通过Firebase
电话更新此媒体资源:
personRef.observe(.value, with: { [unowned self] snapshot in
let personDict = snapshot.value as! [String: [String: Any]]
self.people = personDict.map { Person(dictionary: $0.1) }
self.tableView.reloadData()
})
只要列表发生更改,就会更新我的people
数组。
目前,我通过调用tableView.reloadData()
来更新tableView。我只想重新加载改变的东西:
tableView.beginUpdates()
tableView.reloadRows(at: /* the indexes of the changed elements */, with: .automatic)
tableView.endUpdates()
Firebase
或Foundation
中有一个方便的方法/流程可以返回一个已更改的索引列表吗?或者我需要手动计算吗?
答案 0 :(得分:1)
如果您想更细粒度地更新客户端结构或UI,您应该订阅子事件。
// Listen for new comments in the Firebase database
commentsRef.observe(.childAdded, with: { (snapshot) -> Void in
self.comments.append(snapshot)
self.tableView.insertRows(at: [IndexPath(row: self.comments.count-1, section: self.kSectionComments)], with: UITableViewRowAnimation.automatic)
})
// Listen for deleted comments in the Firebase database
commentsRef.observe(.childRemoved, with: { (snapshot) -> Void in
let index = self.indexOfMessage(snapshot)
self.comments.remove(at: index)
self.tableView.deleteRows(at: [IndexPath(row: index, section: self.kSectionComments)], with: UITableViewRowAnimation.automatic)
})
此代码段会侦听添加或删除子项的时间,然后更新本地comments
数组和表视图以进行更改。