【问题标题】:Issue when loading Data in UITable - Data refresh only after second click在 UITable 中加载数据时出现问题 - 仅在第二次单击后才刷新数据
【发布时间】:2020-06-04 13:16:40
【问题描述】:

我有一个问题。 我想当我按下刷新按钮来刷新我的 UITable 中包含的数据时。 所以我有一个 alamofire 函数,它对我的​​服务器执行 GET 操作,数据用于填充表。

问题是 numberOfRowsInSection 和 cellForRowAt 在调用 API 结束之前被调用。

我可能正在考虑为函数 refreshData 添加一个布尔值,但我没有成功 我也试过

let dispatchGroup = DispatchGroup()
dispatchGroup.enter()
dispatchGroup.leave()

但没有成功

    @IBAction func btnResetPressed(_ sender : UIButton?) {
        hud.textLabel.text = "Loading"
        hud.show(in: self.view)
        self.refreshData()
        hud.dismiss()

    }

    func refreshData() {
        AF().GETBon("\(appUrl.urlApiBonUnbilled)", success: { (response) in
            self.arrBonUnbilled.removeAll()
            var responseObjectBonUnbilled: ResponseObjectBonUnbilled?
            responseObjectBonUnbilled = try? JSONDecoder().decode(ResponseObjectBonUnbilled.self, from: response)
            self.arrBonUnbilled.append(contentsOf: responseObjectBonUnbilled!.data)

            if let data = try? PropertyListEncoder().encode(self.arrBonUnbilled) {
                UserDefaults.standard.setValue(data, forKey: "ListingBon")
                print (try! PropertyListDecoder().decode([BonUnbilled].self, from: UserDefaults.standard.data(forKey: "ListingBon")!))
            }
        }) { (Error) in
            print ("KO: \(Error)")
        }
    }

提前感谢您的帮助。 如果您对改进代码也有任何建议,欢迎提出。

【问题讨论】:

    标签: swift uitableview async-await alamofire-request


    【解决方案1】:

    refreshData() 中重新加载表格视图,并移动该行以将 hud 关闭到关闭中

    @IBAction func btnResetPressed(_ sender : UIButton?) {
        hud.textLabel.text = "Loading"
        hud.show(in: self.view)
        self.refreshData()
    }
    
    func refreshData() {
        AF().GETBon("\(appUrl.urlApiBonUnbilled)", success: { (response) in
            self.arrBonUnbilled.removeAll()
            var responseObjectBonUnbilled: ResponseObjectBonUnbilled?
            responseObjectBonUnbilled = try? JSONDecoder().decode(ResponseObjectBonUnbilled.self, from: response)
            self.arrBonUnbilled.append(contentsOf: responseObjectBonUnbilled!.data)
            self.tableView.reloadData()
            self.hud.dismiss()
            if let data = try? PropertyListEncoder().encode(self.arrBonUnbilled) {
                UserDefaults.standard.set(data, forKey: "ListingBon")
                print (try! PropertyListDecoder().decode([BonUnbilled].self, from: UserDefaults.standard.data(forKey: "ListingBon")!))
            }
        }) { (error) in
            print ("KO: \(error)")
        }
    }
    

    【讨论】:

      【解决方案2】:

      感谢 Vadian 快速而正确的答案,解决了这个问题。 我还必须补充:

      let Height : CGFloat = self.tblData.contentSize.height
      self.tblData.frame.size.height = Height
      

      用于调整表格大小

      【讨论】:

        猜你喜欢
        • 2016-10-31
        • 1970-01-01
        • 2020-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多