Вы можете использовать MKReverseGeocoder от 3.0 до 5.0. Начиная с 5.0 MKReverseGeocoder устарела, и рекомендуется использовать CLGeocoder.
Вы должны использовать CLGeocoder, если доступно. Для того, чтобы иметь возможность извлекать адресную информацию, вам необходимо включить структуру адресной книги.
#import <AddressBookUI/AddressBookUI.h>
#import <CoreLocation/CLGeocoder.h>
#import <CoreLocation/CLPlacemark.h>
- (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) {
//Using blocks, get zip code
NSString* zipCode = [placemark.addressDictionary objectForKey:(NSString*)kABPersonAddressZIPKey];
}
}];
}else{
MKReverseGeocoder* rev = [[MKReverseGeocoder alloc] initWithCoordinate:location.coordinate];
rev.delegate = self;//using delegate
[rev start];
//[rev release]; release when appropriate
}
//[reverseGeocoder release];release when appropriate
}
Метод делегата MKReverseGeocoder:
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
//Get zip code
NSString* zipCode = [placemark.addressDictionary objectForKey:(NSString*)kABPersonAddressZIPKey];
}
MKReverseGeocoder и ABPersonAddressZIPKey устарели в iOS 9.0. Вместо этого postalcode
свойство CLPlacemark
может быть использовано для получения почтового индекса:
NSString * zipCode = placemark.postalCode;