我有一个从FireBase获取数据的方法,将其保存在本地并将其加载到UITableView中。它工作得很好。
现在,这个观察者( rootGenerals.observe())每次在服务器上更改数据时都会实时运行并进行更新。
我的问题是,一旦我获得新数据(我现在这样做),我不想重新加载整个表格,我只想更新表格中的特定更改行或替换行位置(IndexPath)如果分数已更改。
知道怎么做吗?只需要一些指导,了解在这种情况下最好的处理方式。
rootGenerals.observe(.value, with: { snapshot in
if !snapshot.exists() { return }
let general = snapshot.value as! NSDictionary
if let users : NSDictionary = general.object(forKey: "users") as? NSDictionary
{
if (self.usersFromDB?.count != 0) {
// Update table rows
self.arrRecords = []
}
else {
// Create table from scratch
self.usersFromDB = users
for user : Any in users.allKeys {
let userDict : NSDictionary = users.object(forKey: user as! String) as! NSDictionary
let record : Record = Record()
record.displayName = userDict.object(forKey: "name") as! String
record.time = userDict.object(forKey: "time") as! Int
record.solvedLogos = userDict.object(forKey: "logos_solved") as! Int
record.deviceId = userDict.object(forKey: "device_id") as! String
record.raw = userDict
self.arrRecords.append(record)
}
self.sortRecords()
}
}
})
答案 0 :(得分:0)
如果要更新特定的索引路径,请使用
tableView.reloadRows(at: your_indexpath_array, with: your_Animation)
用于在表格中插入新行
tableView.beginUpdates()
tableView.insertRows(at: your_indexpath_array, with: your_Animation)
tableView.endUpdates()
答案 1 :(得分:0)
尝试使用:
rootGenerals.observe(.childAdded, with: { snapshot in
//your code
})
所以每次添加新的子用户时,它都只会读取新数据