【问题标题】:Fill a tableview from JSON with Swift使用 Swift 从 JSON 填充 tableview
【发布时间】:2019-01-15 08:12:20
【问题描述】:

我是一个完全快速的新手,即使是我能做的最简单的事情。例如,我想在 UItableview 中显示来自 JSON 文件的名称列表,但我无法这样做。

具体来说,我的 JSON 返回以下内容:

[{"id_centro":"3","0":"3","nombre":"Colegio Vistarreal","1":"Colegio Vistarreal"},{"id_centro":"1","0":"1","nombre":"IES ITC Sistemas","1":"IES ITC Sistemas"}]

我已经通过以下方式实现了我的 UITableViewController:

import UIKit

class TCentrosController: UITableViewController {

    var centrosList = [String] ()

    override func viewDidLoad() {
        super.viewDidLoad()

        Dologin()

    }


    func Dologin(){

        let url = URL (string: "https://neton.es/WS_neton/lista_centros.php")

        let session = URLSession.shared

        let request = NSMutableURLRequest (url: url!)
        request.httpMethod = "POST"

        let task = session.dataTask(with: request as URLRequest, completionHandler: {

            (data, response, error) in
            guard let _:Data = data else{

                return
            }

            do{

                let json = try JSONSerialization.jsonObject(with: data!, options: []) as! [[String:Any]]

                if json.isEmpty{

                    DispatchQueue.main.async {

                        let alertController = UIAlertController(title: "Atención", message: "No hay centros disponibles", preferredStyle: .alert)


                        let yesAction = UIAlertAction(title: "OK", style: .default)
                        { (action ) -> Void in
                            print("Centros no operativos")
                        }

                        alertController.addAction(yesAction)

                        self.present(alertController, animated: true, completion: nil)

                    }

                    return

                //Si el json no está vacío, sigue por aquí
                }else{

                    let nombreCentro:String = json[1]["nombre"] as! String             
                    self.centrosList.append(nombreCentro)

                }
            }

            catch{
                print("Error")
            }


        })
        task.resume()

    }


  override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return centrosList.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "centros_lista", for: indexPath) as! CeldaCentrosTableViewCell

        cell.labelCell.text = centrosList[indexPath.row]

        return cell
    }
}

但它不会通过屏幕向我返回任何内容。事实上,如果我进行打印 (centrosList.count),它会告诉我五次为零。

如您所见,我没有太多想法,而且我肯定有不止一个我看不到的错误。顺便说一句,我正在用 swift 3 编程

谢谢,感谢您的帮助

【问题讨论】:

    标签: json uitableview swift3


    【解决方案1】:

    您似乎没有在从服务器收到数据时将数据重新加载到 tableView。

    要遵循的一般步骤是

    1. 为 tableView 设置委托、数据源。

    2. 实现所有必需的委托和数据源方法。

    3. 从服务器获取数据并存储到数组中

    4. 重新加载 tableView。

    所以,你应该在下面添加这一行

    self.centrosList.append(nombreCentro)
    

    添加这个

    DispatchQueue.main.async {
      self.tableView.reloadData()
    }
    

    尝试并分享结果。

    【讨论】:

    • 太棒了!这对我的代码非常有效!你拯救了我的一天。非常感谢!!
    猜你喜欢
    • 2016-01-24
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    相关资源
    最近更新 更多