parse docs ios objective-c parse.com cllocationmanager

ios - docs parse platform



Cómo convertir PFGeoPoint a CLLocation (4)

¿Es posible convertir el PFGeoPoint con Parse en una CLLocation?

Por lo que estoy tratando de obtener los nombres de lugares de PFGeoPoint así:

CLGeocoder *geocoder; CLPlacemark *placemark; PFGeoPoint *point = [object objectForKey:@"location"]; [geocoder reverseGeocodeLocation:point completionHandler:^(NSArray *placemarks, NSError *error) { NSLog(@"Found placemarks: %@, error: %@", placemarks, error); if (error == nil && [placemarks count] > 0) { placemark = [placemarks lastObject]; NSLog(@"%@", placemarks); } }];

El error que obtengo obviamente es:

Incompatiable pointer types sending ''PFGeoPoint *'' to parameter of type ''CLLocation *''


CLLocation crear explícitamente la instancia de CLLocation usando initWithLatitude:longitude: con la latitude y longitude desde PFGeoPoint . Solo hay un método práctico para crear un PFGeoPoint desde CLLocation , y no al revés.


Como Wain dijo que no hay un método conveniente para convertir de PFGeoPoint a CLLocation , puedes hacer tu propio y extender PFGeoPoint usando lo siguiente

import Parse extension PFGeoPoint { func location() -> CLLocation { return CLLocation(latitude: self.latitude, longitude: self.longitude) } }

ahora puede devolver fácilmente un objeto CLLocation haciendo

let aLocation: CLLocation = yourGeoPointObject.location()


Siempre puede obtener el PFGeoPoint y luego agregarlo a CLLocationCoordinate2D de esta manera:

//get all PFObjects let parseLocation = ParseObject["location"] let location:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: parseLocation.latitude, longitude: parseLocation.longitude)


Basado en la respuesta de Justin Oroz (ver la respuesta a continuación): También una gran idea podría ser crear la extensión en el lado de CLLocation para que pueda ser creada usando un init de conveniencia que reciba el PFGeoPoint:

extension CLLocation { convenience init(geoPoint: PFGeoPoint) { self.init(latitude: geoPoint.latitude, longitude: geoPoint.longitude) } }