Индекс вне диапазона в swift3 reloadData - PullRequest
0 голосов
/ 11 мая 2018

Прямо сейчас я работаю в списке пользователей в swift 3, работаю правильно, покажу мне картинку, имя и в каком штате и стране проживает пользователь.

Теперь я добавляю «Обновить на слайде» и работаю хорошо, пока количество пользователей не станет меньше 5, когда число больше или равно 6, приложение закроется и покажет мне эту ошибку в консоли: (lldb)

и в строке ошибки: Thread 1: Fatal error: Index out of range

Вот код, который я использую:

var id = [String]()
var nombres = [String]()
var pais = [String]()
var departamento = [String]()
var municipio = [String]()
var direccion = [String]()
var telefono = [String]()
var celular = [String]()
var email = [String]()


@objc func getDatos(){

    self.id.removeAll()
    self.nombres.removeAll()
    self.pais.removeAll()
    self.departamento.removeAll()
    self.municipio.removeAll()
    self.direccion.removeAll()
    self.telefono.removeAll()
    self.celular.removeAll()
    self.email.removeAll()

    let postString = "sesp=\(id)”//sent data post
    let url = URL(string: "https://.——.-.-?\(postString)")!
    var request = URLRequest(url: url)

    request.httpMethod = "POST"//sending type -> post method
    request.httpBody = postString.data(using: .utf8)// concat the variables with utf8

    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data else {
            //if error close
            print("solicitud fallida \(String(describing: error ?? error))")//error
            return
            //broke the code
        }

        do {
            //create the json object

            if let json = try JSONSerialization.jsonObject(with: data) as? [NSDictionary] {

                DispatchQueue.main.async {
                    //principal process
                    for result in json {
                        let id = (result["id"] as? String) ?? "no proporcionado"
                        let nombres = (result["nombres"] as? String) ?? "no proporcionado"
                        let pais = (result["pais"] as? String) ?? "no proporcionado"
                        let departamento = (result["depto"] as? String) ?? "no proporcionado"
                        let municipio = (result["municipio"] as? String) ?? "no proporcionado"
                        let direccion = (result["direccion"] as? String) ?? "no proporcionado"
                        let telefono = (result["telefono"] as? String) ?? ""
                        let celular = (result["celular"] as? String) ?? ""
                        let email = (result["email"] as? String) ?? ""



                        //array elements

                        self.id.append(id)
                        self.nombres.append(nombres)
                        self.pais.append(pais)
                        self.departamento.append(departamento)
                        self.municipio.append(municipio)
                        self.direccion.append(direccion)
                        self.telefono.append(telefono)
                        self.celular.append(celular)
                        self.email.append(email)
                    }
                    if json.count > 0 {
                        self.tableView.reloadData()//refresh the table again
                        self.refreshControl?.endRefreshing()//end refreshcontrol

                    } else {
                        self.refreshControl?.endRefreshing()//end refreshcontrol
                    }
                }
            }

        } catch let parseError {
            // error
            print("error al parsear: \(parseError)")

            let responseString = String(data: data, encoding: .utf8)
            print("respuesta : \(String(describing: responseString))")
        }
    }
    task.resume()
}




    // slide for refresh
    refreshControl = UIRefreshControl()
    refreshControl?.backgroundColor = UIColor.white
    refreshControl?.tintColor = UIColor.gray
    refreshControl?.addTarget(self, action: #selector(ListaDoctoresTableView.getDatos), for: UIControlEvents.valueChanged)
    let titulorefres = "Desliza para actualizar la lista...";
    refreshControl?.attributedTitle = NSAttributedString(string: titulorefres)

    self.getDatos()




    let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier3", for: indexPath) as! ListaDoctoresTableViewCell
    cell.labelNombres.text = self.nombres[indexPath.row].description    //Thread 1: Fatal error: Index out of range
    cell.labelDepartamento.text = self.Departamento[indexPath.row].description

Файл базы данных выбора:

    $statement=$conn->prepare("SELECT id, CONCAT(nombres, ' ', apellidos) AS nombres, 
    pais, depto,  municipio, direccion, telefono, celular, email
    FROM USERS");
    $statement->execute();
    $results=$statement->fetchAll(PDO::FETCH_ASSOC);


    $categorias = array();

function getCats($col, $row) {
        $categorias[$col['id']] = $row['id'];
        $categorias[$col['nombres']] = $row['nombres'];
        $categorias[$col['pais']] = $row['pais'];
        $categorias[$col['depto']] = $row['depto'];
        $categorias[$col['municipio']] = $row['municipio'];
        $categorias[$col['direccion']] = $row['direccion'];
        $categorias[$col['telefono']] = $row['telefono'];
        $categorias[$col['celular']] = $row['celular'];
        $categorias[$col['email']] = $row['email'];
}
array_push($categorias, $results);
echo $json=json_encode($results);
...