Forward-Geocodierung mehrerer Adressen ausstellen

Ich verbinde mich mit einem Remote-Web-Service, der im Grunde ein xml zurückgibt. Ich parse dann diese xml in ein Property-Objekt (denke, Real-State-Art der Sache)

But now, the web service returns a postal code for each property alone. It does not provide a coordinate which is what I need to place an annotation in the map. I am able to geocode an address provided a postal code. However, my problem is it is not allowing me to do multiple requests

Hier ist mein Code

- (void)processProperties:(Property *)property {

    [geocoder geocodeAddressString:property.postalCode
                 completionHandler:^(NSArray* placemarks, NSError* error){
                     placemark = [placemarks lastObject];
                     for (CLPlacemark* aPlacemark in placemarks)
                     {
                         [sublet setLatitude:aPlacemark.location.coordinate.latitude];
                         [sublet setLongitude:aPlacemark.location.coordinate.longitude];  
                     }
                 }];
}


- (void)addAnnotations:(NSArray *)objects {
    CLLocationDegrees lat;
    CLLocationDegrees longitude;
    CLLocationCoordinate2D mCoords;
    NSString *fullAddress;

   //Add the annotations found nearby
    for (Property *property in objects) {

        [self processProperties:property];
        lat = property.latitude;
        longitude = property.longitude;

        fullAddress = [NSString stringWithFormat:@"%@ %@ %@", property.houseNumber, @" ", property.streetName];
        [self createAnnotationWithCoords:mCoords :fullAddress :[NSString stringWithFormat:@"$%.2f", property.rent]];
    }
    zoomLevel = 0.1;
    mCoords = CLLocationCoordinate2DMake(lat,longitude);
    MKCoordinateRegion region = MKCoordinateRegionMake(mCoords,MKCoordinateSpanMake(zoomLevel,zoomLevel));

   [self.mapView setRegion:region animated:YES];
}

Aus irgendeinem Grund wird nur eine Eigenschaft geocodiert. Geht nicht entsprechend durch die Schleife.

Irgendwelche Ideen Leute?

3

1 Antworten

Verwenden Sie dies bei Ihrer Forward Geo-Funktion. Der Geocoder muss freigegeben und initialisiert werden, um eine neue Adresse zu erstellen. Ich hoffe, dies hilft.

- (void)processProperties:(Property *)property { 
CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
[geocoder geocodeAddressString:property.postalCode
             completionHandler:^(NSArray* placemarks, NSError* error){
                 placemark = [placemarks lastObject];
                 for (CLPlacemark* aPlacemark in placemarks)
                 {
                     [sublet setLatitude:aPlacemark.location.coordinate.latitude];
                     [sublet setLongitude:aPlacemark.location.coordinate.longitude];  
                 }
                 [geocoder release];
             }];
  }
6
hinzugefügt
Apple scheint zu empfehlen, nur eine Geocodierung pro App-Sitzung durchzuführen, was sehr einschränkend ist. Sie haben recht, dass sie dies zu erzwingen scheinen, indem sie nur eine Instanz einen Anruf erlauben. Das Erstellen von mehreren Instanzen löst das Problem, aber es ist sicher eine seltsame Sache zu tun.
hinzugefügt der Autor akaru, Quelle