简体   繁体   English

重新加载tableview视图,如刷新

[英]reload tableview view like refresh

I am populating tableview with json data and its work successfully but now I want to update tableview on refresh button click in refresh button i call again existing func which I create to call api let me show you my code 我正在用json数据填充tableview及其工作成功,但是现在我想在刷新按钮上更新tableview在刷新按钮中单击我再次调用我创建的现有func来调用api让我向您展示我的代码

Code

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

    })
}

I am calling this func for populating table view and I am doing like below 我正在调用此func来填充表格视图,而我的操作如下

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

the issue was that after re calling this function data again and again repeated so how can I solve this problem? 问题是,一次又一次地重复调用此函数数据后,如何解决此问题?

Please try this code : 请尝试以下代码:

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

    })
}

It may helps you thank you. 它可以帮助您,谢谢您。

Clear here 在这里清除

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()
}

You can also declare the array as Set to remove similar objects 您也可以将数组声明为Set以删除相似的对象

It's simple...just because on refresh you are calling 'OverdueList' but failed to clear data from an array of overDueData. 这很简单...只是因为刷新时您正在调用“ OverdueList”,但无法从overDueData数组中清除数据。 That's the reason you are getting data repeated. 这就是您重复获取数据的原因。

For this, you just need to do this as simple. 为此,您只需要简单地完成此操作即可。

@IBAction func btnRefreshTapped(_ sender: UIButton) {    
     self.overDueData.removeAll()
     self.OverdueList()    
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM