es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener un error en la URL al intentar obtener datos desde la API.

Estoy intentando obtener datos de openweathermap.org y obtengo un error en url.

Error: Thread 1: Error fatal: Encontrado inesperadamente nil mientras se desenvolvía un valor opcional

Este es mi dato:

struct CitiesWeather: Decodable {

    var coord : Coordinate?

}

struct Coordinate: Decodable {

    var longitude: Double
    var latitude: Double

}

Mi código:

class DayWeatherViewModel: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    let url = "http:// api.openweathermap.org/data/2.5/weather?q=London&appid=myAppID"
    getData(from: url)

}

func getData(from url: String) {

        let task = URLSession.shared.dataTask(with: URL(string: url)!) { data, response, error in //**<--Error en url!**
            guard let data = data, error == nil else {
                print("algo salió mal")
                return
            }

            var result: CitiesWeather?
            do {
                result = try JSONDecoder().decode(CitiesWeather.self, from: data)
            }
            catch {
                print("falló en la conversión \(error.localizedDescription)")
            }

            guard let json = result else {
                return
            }
            print(json.coord)
            print(json.coord?.latitude)
            print(json.coord?.longitude)
        }

        task.resume()

    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error “Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value” ocurre cuando se intenta forzar a desempaquetar un valor nulo.

    En este caso, el error ocurre en esta línea: let task = URLSession.shared.dataTask(with: URL(string: url)!). Esto significa que hay un problema con la cadena de URL y está devolviendo nulo al intentar crear un objeto URL.

    Asegúrese de que la cadena de URL sea correcta y esté formateada correctamente. Además, intente imprimir la cadena de URL para asegurarse de que sea lo que espera que sea. Si está utilizando una clave de API, asegúrese de que esté incluida en la URL correctamente.

    Además, puede utilizar la asignación opcional para desempaquetar la cadena de URL de manera segura:

    if let url = URL(string: url) {
        let task = URLSession.shared.dataTask(with: url) { data, response, error in
            // resto del código...
        }
        task.resume()
    } else {
        print("La cadena de URL es inválida")
    }
    

Comments are closed.