Ответ 1
Вам нужно немного пересмотреть свою терминологию - CLGeocoder (и большинство геокодеров) не даст вам "город" per-se - он использует такие термины, как "Административная область", "Субадминистративная зона" и т.д. CLGeocoder объект вернет массив объектов CLPlacemark, которые затем вы можете запросить необходимую информацию. Вы запускаете CLGeocoder и вызываете функцию reverseGeocodeLocation с местоположением и блоком завершения. Вот пример:
if (osVersion() >= 5.0){
CLGeocoder *reverseGeocoder = [[CLGeocoder alloc] init];
[reverseGeocoder reverseGeocodeLocation:self.currentLocation completionHandler:^(NSArray *placemarks, NSError *error)
{
DDLogVerbose(@"reverseGeocodeLocation:completionHandler: Completion Handler called!");
if (error){
DDLogError(@"Geocode failed with error: %@", error);
return;
}
DDLogVerbose(@"Received placemarks: %@", placemarks);
CLPlacemark *myPlacemark = [placemarks objectAtIndex:0];
NSString *countryCode = myPlacemark.ISOcountryCode;
NSString *countryName = myPlacemark.country;
DDLogVerbose(@"My country code: %@ and countryName: %@", countryCode, countryName);
}];
}
Теперь обратите внимание, что CLPlacemark не имеет свойства "city". Полный список свойств можно найти здесь: Ссылка на класс CLPlacemark