Probleem doorsturen - meerdere adressen geocoderen

Ik maak verbinding met een externe webservice die in principe een xml retourneert. Ik parseer die xml vervolgens in een Property-object (denk aan echte toestand)

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 is mijn 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];
}

Om een ​​of andere reden is het slechts 1 eigenschap geocoderen. Gaat niet door de lus.

Heb je ideeën voor mensen?

3

1 antwoord

Gebruik dit op uw Forward Geo-functie. geocoder moet worden vrijgegeven en opnieuw worden geïnitialiseerd om een ​​nieuw adres te starten, ik hoop dat dit helpt.

- (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
toegevoegd
Apple lijkt aan te bevelen om slechts één geocodering per app-sessie uit te voeren, wat zeer beperkend is. U hebt gelijk dat zij dit lijken af ​​te dwingen door alleen een instantie één oproep toe te staan. Het maken van meerdere exemplaren lost het probleem op, maar het is wel iets vreemds om te doen.
toegevoegd de auteur akaru, de bron