Вы можете использовать CLLocationManager
и MKReverseGeocoder
, чтобы получить город пользователей.
Сначала добавьте CLLocationManager
и начните обновлять местоположение пользователя
- (void)startLocationManager
{
if (locManager==nil)
locManager = [[CLLocationManager alloc] init];
if (locManager.locationServicesEnabled)
{
NSLog(@"User has opted out of service on it error");
} else {
locManager.delegate = self;
locManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[locManager startUpdatingLocation];
}
}
Затем добавьте методы делегата менеджера местоположений для использования MKReverseGeocoder
.
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLog(@"Manager error: %@", [error description]);
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
self.geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate];
[geocoder release];
geocoder.delegate = self;
[geocoder start];
[manager stopUpdatingLocation];
}
и, конечно, вы должны реализовать MKReverseGeocoder
методы делегирования
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error
{
NSLog(@"reverseGeocoder:%@ didFailWithError:%@", geocoder, error);
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
// with the placemark you can now retrieve the city name
NSString *city = [placemark.addressDictionary objectForKey:@"City"];
NSLog(@"City is %@", city);
}
Этот метод можно использовать, если пользователь дает разрешение на ваше приложение для менеджера местоположений.