使用JSON数据填充表

时间:2018-03-04 20:54:21

标签: json swift uitableview

我尝试使用本地页面中的JSON填充表格。 到目前为止,它从JSON中获取所有数据,但仍然没有任何文本进入单元格。

我检查了我的单元格的标识符,它与withIdentifier匹配,或者使用了变量nom或fec,但也没有工作。

任何帮助都会有用(除了使用Alamofire)。

import UIKit

class ListarViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var nom: String?
    var fec: String?
    var datas = [Actividad]()

    struct Actividad : Codable {
        let actividad: String?
        let fecha: String?
    }

    @IBOutlet weak var pruebalbl: UILabel!
    var correo: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        pruebalbl.text = correo
        //print(correo)
        let request = NSMutableURLRequest(url: NSURL(string: "http://localhost:8080/swiftdb/listarAct.php")! as URL)

        request.httpMethod = "POST"
        let postString = "correo=\(pruebalbl.text!)"
        request.httpBody = postString.data(using: String.Encoding.utf8)

        let task = URLSession.shared.dataTask(with: request as URLRequest) {
            data, response, error in

            guard let data = data, error == nil else{return}

            do {
                let articlesData = try JSONDecoder().decode([Actividad].self, from: data)

                DispatchQueue.main.async{
                    self.datas = articlesData

                    let aarti = self.datas
                    print(self.datas)

                    for item in aarti {
                        self.nom = item.actividad
                        self.fec = item.fecha
                        print("Nombres  \(self.nom)")
                        print("Fecha  \(self.fec)")
                    }
                }
            } catch let error as NSError {
                print(error)
            }

            print("response = \(response)")

            let responseString = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
            print("responseString = \(responseString)")
        }
        task.resume()
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
        cell?.textLabel?.text = datas[indexPath.row].actividad
        return cell!
    }
}

我甚至将自定义文本添加到单元格.textLabel?.text并且不起作用。

2 个答案:

答案 0 :(得分:1)

感谢@vadian

我得到了答案:

我只需要在DispatchQueue.main.async {}

之间添加reloadData()

答案 1 :(得分:0)

也许您必须在调用异步函数之前验证来自url请求的状态。

let response = response as? HTTPURLResponse
if(response?.statusCode == 200) {
  //Call your DispatchQueue
}

我希望这对你有用。

素不相识!