swift 4 Пустой UITableView перед UIRefeshControl - PullRequest
0 голосов
/ 17 сентября 2018

Добрый день, ребята! У меня есть небольшая проблема с обновлением данных. Я получаю информацию из бэкэнда с помощью JSON-RPC и заполняю ячейки моего табличного представления. Я реализовал UIRefreshContol для моего TableView, так что теперь, когда я нажимаю, чтобы обновить, он дает мне новую информацию поверх старой. Итак, у меня есть список продуктов, и когда я добавляю некоторые продукты и обновляю tableView для получения обновленной информации, tableView дает мне старую информацию и новую поверх старой. Есть ли способы очистить таблицу до того, как я получу обновленную информацию из JSON?

// Это мой JSON

func getJSONresponse() {
    getResponse(o_method: "search_read", o_model: "res.users", o_domain:[["id", "=", jkID]], o_fields: ["name","partner_id"]) { (result) -> () in
        //print(result)
        if result != JSON.null {
            let partner_id = result[0]["partner_id"][0].int!
            getResponse(o_method: "search_read", o_model: "res.partner", o_domain: [["id", "=", partner_id]], o_fields: ["name", "kato"], completion: { (result)->() in
                //print(result)
                let id = result[0]["kato"][0].int!
                katoID = id
                print("adiasodjasoid",katoID)
                getResponse(o_method: "search_read", o_model: "property.building", o_domain: [], o_fields: ["name","kato_area"], completion: { (result)->() in

                    result.forEach({ (temp) in

                        var area:String = "", name:String = "", totID: Int = 0

                        if (temp.1["kato_area"].string != nil) {
                            area = temp.1["kato_area"].string!
                        }
                        if (temp.1["name"].string != nil) {
                            name = temp.1["name"].string!
                        }
                        if (temp.1["id"].int != nil) {
                            totID = temp.1["id"].int!
                        }

                        let newModel = resUser(area: area, name: name, id: totID)
                        self.data.append(newModel)
                    })
                    DispatchQueue.main.async {
                        self.tableView.reloadData()
                    }
                    //                        print(self.data)
                })
            })
        }
    }
}

Это моя функция для обновления

@objc func refreshData() {

    tableView.reloadData()
    getJSONresponse()
    self.tableView.contentInset = UIEdgeInsets(top: 80, left: 0, bottom: 0, right: 0)
    DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
        self.refresher.endRefreshing()
        self.tableView.contentInset = UIEdgeInsets.zero
        self.tableView.setContentOffset(.zero, animated: true)
    }
}

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Ну, вам придется связать UITableView с массивом, некоторые могут также ссылаться на него как на источник данных.

Так что в основном это поток:

1) Создайте изменяемый массив / источник данных (это будет содержать весь JSON).

2) Соответствующий метод количества строк в UITableView, возвращающий счетчик этого массива / источника данных.

3) При нажатии на кнопку обновления. удалить все содержимое массива / источника данных (removeAll)

4) Получив ответ от бэкэнда, добавьте его в массив / источник данных и вызовите reloadData для объекта UITableView.

Надежда, которая помогает. Код и Проспер !!

0 голосов
/ 17 сентября 2018

Пожалуйста, свяжите UITableView с Array.Затем обновите Array сначала из данных, которые вы получаете из JSON (очистите его и вставьте новые данные), а затем вызовите UITableView reload.

...