Запустить прямое геокодирование нескольких адресов

Я подключаюсь к удаленной веб-службе, которая в основном возвращает XML. Затем я разбираю этот XML в объект Property (думаю, что-то вроде реального состояния)

Но теперь веб-служба возвращает почтовый индекс только для каждого свойства. Он не предоставляет координаты, которые мне нужны для размещения аннотации на карте. Я могу геокодировать адрес с почтовым индексом. Однако моя проблема в том, что он не позволяет мне выполнять несколько запросов.

Вот мой код

- (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];
}

По какой-то причине это просто геокодирование 1 свойства. Не проходит цикл соответственно.

Любые идеи, ребята?


person MrShoot    schedule 12.11.2011    source источник


Ответы (1)


Используйте это в своей функции Forward Geo. геокодер должен быть выпущен и инициализирован снова, чтобы начать новый адрес, надеюсь, это поможет.

- (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];
             }];
  }
person Silent    schedule 17.01.2012
comment
Apple, похоже, рекомендует выполнять только одно геокодирование за сеанс приложения, что очень ограничивает. Вы правы в том, что они, похоже, применяют это, разрешая экземпляру только один вызов. Создание нескольких экземпляров решает проблему, но это, безусловно, странная вещь. - person akaru; 19.12.2012