2014-12-23 19 views
5

Ist es möglich, den PFGeoPoint mit Parse in einen CLLocation umzuwandeln?Wie konvertiert man PFGeoPoint in CLLocation

Grund dafür ist Ich versuche, die Namen von Orten aus PFGeoPoint zu erhalten wie folgt:

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); 

           } 
          }]; 

Fehler ich offensichtlich ist:

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

Antwort

5

Sie müssen explizit die CLLocation Instanz erstellen mit initWithLatitude:longitude: mit der latitude und longitude aus der PFGeoPoint. Es gibt nur eine bequeme Methode zum Erstellen eines PFGeoPoint von einem CLLocation, nicht umgekehrt.

6

Wie Wain sagte, es gebe keine bequeme Methode von PFGeoPoint zu einem CLLocation zu konvertieren ist aber Sie Ihre selbst bilden können und erweitern PFGeoPoint folgendes mit

import Parse 

extension PFGeoPoint { 

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

jetzt können Sie ganz einfach durch ein CLLocation Objekt zurückgeben tun

let aLocation: CLLocation = yourGeoPointObject.location() 
0

Man konnte immer die PFGeoPoint bekommen und es dann so zu einem CLLocationCoordinate2D hinzufügen:

//get all PFObjects 

let parseLocation = ParseObject["location"] 

let location:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: parseLocation.latitude, longitude: parseLocation.longitude) 
2

Basierend auf Justin Oroz des answer (die Antwort siehe unten): Auch kann eine gute Idee sein könnte die Erweiterung in der CLLocation Seite zu erstellen, so dass es eine Bequemlichkeit init erstellt werden, die die PFGeoPoint erhält:

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