перезагрузить представление таблицы как обновление - PullRequest
0 голосов
/ 17 января 2019

Я заполняю табличное представление данными json и оно успешно работает, но теперь я хочу обновить табличное представление при нажатии кнопки обновления, нажмите кнопку обновления, я снова вызываю существующее func, которое я создаю для вызова api, позвольте мне показать вам мой код

Код

func OverdueList(){
    let preferences = UserDefaults.standard
    let uid = "u_id"
    let acTkn = "acc_tkn"

    let u_ID = preferences.object(forKey: uid)
    let A_Token = preferences.object(forKey: acTkn)

    let params = ["user_id": u_ID!, "access_token": A_Token!]
    print(params)
    SVProgressHUD.show()
    Alamofire.request(inspectionsList, method: .post, parameters: params).responseJSON(completionHandler: {(response) in
        switch response.result{
        case.success(let value):
            let json  = JSON(value)
            print(json)
            let data = json["inspections_overdue_data"]
            print(data)
            if data == []{
                self.viewNodata.isHidden = false
            }else{
                data.array?.forEach({ (iunOverDue) in
                    let iOveList = OvedueModel(surveyor_id: iunOverDue["surveyor_id"].stringValue, country: iunOverDue["country"].stringValue, time: iunOverDue["time"].stringValue, address2: iunOverDue["address2"].stringValue, address3: iunOverDue["address3"].stringValue, notes: iunOverDue["notes"].stringValue, house_num: iunOverDue["house_num"].stringValue, name: iunOverDue["name"].stringValue, address1: iunOverDue["address1"].stringValue, latitude: iunOverDue["latitude"].stringValue, eircode: iunOverDue["eircode"].stringValue, date_inspected: iunOverDue["date_inspected"].stringValue, property_id: iunOverDue["property_id"].stringValue, county: iunOverDue["county"].stringValue, client_id: iunOverDue["client_id"].stringValue, longitude: iunOverDue["longitude"].stringValue)
                    self.searchResult = self.overDueData
                    self.overDueData.append(iOveList)
                })

                self.tblOvedue.reloadData()
            }
            SVProgressHUD.dismiss()
        case.failure(let error):
            print(error.localizedDescription)
        }

    })
}

Я вызываю эту функцию для заполнения табличного представления, и я делаю, как показано ниже

@IBAction func btnRefreshTapped(_ sender: UIButton) {
      OverdueList()
    }

проблема заключалась в том, что после повторного вызова этой функции данные снова и снова повторялись, так как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Пожалуйста, попробуйте этот код:

func OverdueList(){


    let preferences = UserDefaults.standard
    let uid = "u_id"
    let acTkn = "acc_tkn"

    let u_ID = preferences.object(forKey: uid)
    let A_Token = preferences.object(forKey: acTkn)

    let params = ["user_id": u_ID!, "access_token": A_Token!]
    print(params)
    SVProgressHUD.show()
    Alamofire.request(inspectionsList, method: .post, parameters: params).responseJSON(completionHandler: {(response) in
        switch response.result{
        case.success(let value):
            self.overDueData.removeAll()
            let json  = JSON(value)
            print(json)
            let data = json["inspections_overdue_data"]
            print(data)
            if data == []{
                self.viewNodata.isHidden = false
            }else{
                data.array?.forEach({ (iunOverDue) in
                    let iOveList = OvedueModel(surveyor_id: iunOverDue["surveyor_id"].stringValue, country: iunOverDue["country"].stringValue, time: iunOverDue["time"].stringValue, address2: iunOverDue["address2"].stringValue, address3: iunOverDue["address3"].stringValue, notes: iunOverDue["notes"].stringValue, house_num: iunOverDue["house_num"].stringValue, name: iunOverDue["name"].stringValue, address1: iunOverDue["address1"].stringValue, latitude: iunOverDue["latitude"].stringValue, eircode: iunOverDue["eircode"].stringValue, date_inspected: iunOverDue["date_inspected"].stringValue, property_id: iunOverDue["property_id"].stringValue, county: iunOverDue["county"].stringValue, client_id: iunOverDue["client_id"].stringValue, longitude: iunOverDue["longitude"].stringValue)
                    self.searchResult = self.overDueData
                    self.overDueData.append(iOveList)
                })

                self.tblOvedue.reloadData()
            }
            SVProgressHUD.dismiss()
        case.failure(let error):
            print(error.localizedDescription)
        }

    })
}

Это может помочь вам поблагодарить.

0 голосов
/ 17 января 2019

Это просто ... просто потому, что при обновлении вы вызываете 'OverdueList', но не можете удалить данные из массива overDueData. Вот почему вы повторяете данные.

Для этого вам просто нужно сделать это просто.

@IBAction func btnRefreshTapped(_ sender: UIButton) {    
     self.overDueData.removeAll()
     self.OverdueList()    
}
0 голосов
/ 17 января 2019

Очистить здесь

case.success(let value):
let json  = JSON(value)
print(json)
let data = json["inspections_overdue_data"]
print(data)
if data == []{
    self.viewNodata.isHidden = false
}else{
    self.overDueData.removeAll()
    data.array?.forEach({ (iunOverDue) in
        let iOveList = OvedueModel(surveyor_id: iunOverDue["surveyor_id"].stringValue, country: iunOverDue["country"].stringValue, time: iunOverDue["time"].stringValue, address2: iunOverDue["address2"].stringValue, address3: iunOverDue["address3"].stringValue, notes: iunOverDue["notes"].stringValue, house_num: iunOverDue["house_num"].stringValue, name: iunOverDue["name"].stringValue, address1: iunOverDue["address1"].stringValue, latitude: iunOverDue["latitude"].stringValue, eircode: iunOverDue["eircode"].stringValue, date_inspected: iunOverDue["date_inspected"].stringValue, property_id: iunOverDue["property_id"].stringValue, county: iunOverDue["county"].stringValue, client_id: iunOverDue["client_id"].stringValue, longitude: iunOverDue["longitude"].stringValue)
        self.searchResult = self.overDueData
        self.overDueData.append(iOveList)
    })

    self.tblOvedue.reloadData()
}

Вы также можете объявить массив как Set для удаления похожих объектов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...