2012-02-23 5 views
0

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

- (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

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

+0

Я смог найти решение для этого. Спасибо за ваш совет! – Kimpoy

Смежные вопросы