web-dev-qa-db-fra.com

Inverser l'emplacement du géocodage dans Swift

Mon entrée est une latitude et une longitude. J'ai besoin d'utiliser la fonction reverseGeocodeLocation de Swift, pour me donner la sortie de la localité. Le code que j'ai essayé d'utiliser est

            println(geopoint.longitude) 
            println(geopoint.latitude)
            var manager : CLLocationManager!
            var longitude :CLLocationDegrees = geopoint.longitude
            var latitude :CLLocationDegrees = geopoint.latitude

            var location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
            println(location)

            CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: {(placemarks, error) -> Void in
                println(manager.location)

                if error != nil {
                    println("Reverse geocoder failed with error" + error.localizedDescription)
                    return
                }
                if placemarks.count > 0 {
                    let pm = placemarks[0] as CLPlacemark


                    println(pm.locality)
                }


                else {
                    println("Problem with the data received from geocoder")
                }

dans les journaux que je reçois

//-122.0312186
//37.33233141
//C.CLLocationCoordinate2D
//fatal error: unexpectedly found nil while unwrapping an Optional value

Il semble que le CLLocationCoordinate2DMakefunction échoue, ce qui provoque alors l'erreur fatale dans la fonction reverseGeocodeLocation. Ai-je foutu le format quelque part?

23
TimWhiting

vous n'inversez jamais le géocodage de l'emplacement mais vous passez dans manager.location.

voir: CLGeocoder().reverseGeocodeLocation(manager.location, ...

Je suppose que c'était une erreur de copier-coller et que c'est le problème - le code lui-même semble bon - presque;)

code de travail

    var longitude :CLLocationDegrees = -122.0312186
    var latitude :CLLocationDegrees = 37.33233141

    var location = CLLocation(latitude: latitude, longitude: longitude) //changed!!!
    println(location)

    CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in
        println(location)

        if error != nil {
            println("Reverse geocoder failed with error" + error.localizedDescription)
            return
        }

        if placemarks.count > 0 {
            let pm = placemarks[0] as! CLPlacemark
            println(pm.locality)
        }
        else {
            println("Problem with the data received from geocoder")
        }
    })
66
Daij-Djan