Заполните таблицу из JSON с помощью Swift - PullRequest
0 голосов
/ 15 января 2019

Я быстрый новичок и даже самые простые вещи, которые я могу сделать. Например, я хотел бы показать в 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

Спасибо, любая помощь приветствуется

1 Ответ

0 голосов
/ 15 января 2019

Похоже, вы не перезагружаете данные в tableView при получении их с сервера.

Основные шаги, которые необходимо выполнить:

  1. установить делегата, источник данных для tableView.

  2. Реализация всех необходимых методов делегата и источника данных.

  3. получить данные с сервера и сохранить их в массиве

  4. перезагрузить tableView.

Итак, вы должны добавить эту строку ниже

self.centrosList.append(nombreCentro)

Добавить это

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

Попробуйте и поделитесь результатами.

...