Обратный геокод с использованием CLGeocoder - PullRequest
0 голосов
/ 23 февраля 2012

Я хотел бы попросить второе мнение о моем решении обратного геокодирования при получении текущего местоположения пользователя:

 - (void)reverseGeocodeLocation:(CLLocation *)location
{ 
    CLGeocoder* reverseGeocoder = [[CLGeocoder alloc] init];
    if (reverseGeocoder) {
        [reverseGeocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
            CLPlacemark* placemark = [placemarks firstObject];
            if (placemark && [placemark count] > 0) {
                 //Using blocks, get zip code
                 NSString *zipCode = [placemark.addressDictionary objectForKey:(NSString*)kABPersonAddressZIPKey];
            }
        }];
    }
    else{
        MKReverseGeocoder* revGeo = [[MKReverseGeocoder alloc] initWithCoordinate:location.coordinate];
        revGeo.delegate = self;//using delegate
        [revGeo start];
        [revGeo release]; 
    }
    [reverseGeocoder release];
}

однако, похоже, возникла небольшая проблема ...обнаружена ошибка EXC_BAD_ACCESS, указывающая на:

[reverseGeocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
            CLPlacemark* placemark = ...
        }];

Не могли бы вы сказать мне, что пошло не так?Я получил EXC_BAD_ACCESS ошибку.

1 Ответ

1 голос
/ 30 марта 2012

Вы не проверяете ошибку, отправленную в блок.Вы предполагаете, что вернули хотя бы одну метку, но по какой-то причине массив может быть пустым.Это, безусловно, может быть источником вашей ошибки EXC_BAD_ACCESS.

...