从服务器swift更新数组中的更改

时间:2017-10-14 15:26:18

标签: ios swift uitableview firebase

我有一个从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()
            }
        }
    })

2 个答案:

答案 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
})

所以每次添加新的子用户时,它都只会读取新数据