如何刷新表格视图?

How do I refresh a tableview?

我敢在这里写信,看看你能不能帮我一个细节,我在查询和下载一个可以更改的安排时,总之,在创建新记录时,我想要一个新的查询是为了我的 API 下载新数据。感谢所有的评论,非常感谢,向大家问好。

为此,我使用模型和协议。

CitasDetalles.swift

import UIKit

class DetallesCitas: NSObject {

var idCitaCliente: String?
var nombreCitaCliente: String?
var idClienteCita: String?
var horarioCita: String?
var fechaCita: String?
var citaStatus: String?
var citaServicio: String?
var citaBarbero: String?

override init(){

}

init(idCitaCliente: String, nombreCitaCliente: String, idClienteCita:String, horarioCita:String, fechaCita: String, citaStatus: String, citaServicio: String, citaBarbero: String) {

    self.idCitaCliente = idCitaCliente
    self.nombreCitaCliente = nombreCitaCliente
    self.idClienteCita = idClienteCita
    self.horarioCita = horarioCita
    self.fechaCita = fechaCita
    self.citaStatus = citaStatus
    self.citaBarbero = citaBarbero

}

override var description: String{

    return "idCitaCliente: \(idCitaCliente), nombreCitaCliente: \(nombreCitaCliente), idClienteCita: \(idClienteCita), horarioCita: \(horarioCita), fechaCita: \(fechaCita), citaStatus: \(citaStatus), citaServicio: \(citaServicio), citaBarbero: \(citaBarbero)"
}
}

CitasModelo.swift

import UIKit
protocol CitasModeloProtocol: class {

func itemsCitas(lasCitas: NSArray)
}

let idCliente: String = UserDefaults.standard.string(forKey: “id”)!

class CitasModelo: NSObject {

weak var elDelegado: CitasModeloProtocol!

let urlPath = "http://sistema.gents.mx/movilBackendGENTS/listaCitasCliente.php?idCliente=\(idCliente)"

func downloadItems(){

    let url: URL = URL(string: urlPath)!
    let defaultSession = Foundation.URLSession(configuration: URLSessionConfiguration.default)
    let task = defaultSession.dataTask(with: url){
        (data, response, error) in
        if error != nil{

            print("Error al descargas las citas")

        }else{

            print("Datos descargados")

            self.parseJSON(data!)


        }
    }

    task.resume()

}



func parseJSON(_ data:Data){

    var resultFromServer: Any?
    resultFromServer = try? JSONSerialization.jsonObject(with: data, options: [])

    if let respdict = resultFromServer as? [String : Any] {
        //respone in dictionary format

        var jsonDi = NSDictionary()

        do{

            jsonDi = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! NSDictionary

            let parsedJSON = jsonDi
            if parsedJSON["status"] as! String == "401"{

                print(parsedJSON["message"] as! String)

            }

        } catch {


        }



    }

    else if let respArr = resultFromServer as? [Any]{
        //response is array type
            var jsonResult = NSArray()
        do{

            jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! NSArray

        } catch let error as NSError {

            print(error)
        }

        var jsonElement = NSDictionary()
        let detalles = NSMutableArray()
        for i in 0 ..< jsonResult.count{

            jsonElement = jsonResult[i] as! NSDictionary
            let detalle = DetallesCitas()

            let idCitaCliente = jsonElement["id"]
            let nombreCitaCliente = jsonElement["usuarioCita"]
            let idClienteCita = jsonElement["idCliente"]
            let horarioCita = jsonElement["citaHorario"]
            let fechaCita = jsonElement["citaDia"]
            let citaStatus = jsonElement["statusCitas"]
            let citaServicio = jsonElement["citaServicio"]
            let citaBarbero = jsonElement["barberoCita"]

            detalle.idCitaCliente = idCitaCliente as? String
            detalle.nombreCitaCliente = nombreCitaCliente as? String
            detalle.idClienteCita = idClienteCita as? String
            detalle.horarioCita = horarioCita as? String
            detalle.fechaCita = fechaCita as? String
            detalle.citaStatus = citaStatus as? String
            detalle.citaServicio = citaServicio as? String
            detalle.citaBarbero = citaBarbero as? String

            detalles.add(detalle)

        }

        DispatchQueue.main.async(execute: { ()-> Void in

            self.elDelegado.itemsCitas(lasCitas: detalles)
        })

    }

    else if let stringRespt = String(data: data, encoding: .utf8){
        //resp is string
    }


}
}

ListaCitasVC.swift

import UIKit

class ListaCitasVC: UIViewController, UITableViewDataSource, UITableViewDelegate, CitasModeloProtocol {

var feedItems: NSArray = NSArray()
var selectCita : DetallesCitas = DetallesCitas()

@IBOutlet weak var citasLista: UITableView!

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    citasLista.reloadData()
}

override func viewDidLoad() {
    super.viewDidLoad()

    self.citasLista.delegate = self
    self.citasLista.dataSource = self

    let citasModelo = CitasModelo()
    citasModelo.elDelegado = self
    citasModelo.downloadItems()
    self.citasLista.reloadData()
    // Do any additional setup after loading the view.
}

func itemsCitas(lasCitas: NSArray) {
    feedItems = lasCitas
    self.citasLista.reloadData()
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return feedItems.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "celdaCitas", for: indexPath) as! CitasTVC
    let item: DetallesCitas = feedItems[indexPath.row] as! DetallesCitas

    cell.lblHoraCita!.text = item.horarioCita
    cell.lblFechaCita!.text = item.fechaCita
    cell.lblStatusCitas!.text = item.citaStatus
    cell.lblServicioCita!.text = item.citaServicio
    cell.lblBarbero!.text = item.citaBarbero

    return cell

}

}

我找到了一些清除 URLSession 缓存的方法:

1) 将 Foundation.URLSession(configuration: URLSessionConfiguration.default) 替换为 Foundation.URLSession(configuration: URLSessionConfiguration.ephemeral)

2) 在重新加载数据之前添加此方法:URLCache.shared.removeAllCachedResponses()