CLLocationManager not getting City name

cllocationmanager, cocoa-touch, ios, iphone, objective-c

Solution

EDITED:

- (void) getReverseGeocode
{
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];

    if(currentLatLong.count > 0)
    {
        CLLocationCoordinate2D myCoOrdinate;

        myCoOrdinate.latitude = LatValue;
        myCoOrdinate.longitude = LangValue;

        CLLocation *location = [[CLLocation alloc] initWithLatitude:myCoOrdinate.latitude longitude:myCoOrdinate.longitude];
        [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error)
         {
             if (error)
             {
                 NSLog(@"failed with error: %@", error);
                 return;
             }
             if(placemarks.count > 0)
             {
                 NSString *MyAddress = @"";
                 NSString *city = @"";

                 if([placemark.addressDictionary objectForKey:@"FormattedAddressLines"] != NULL)
                     MyAddress = [[placemark.addressDictionary objectForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "];
                 else
                     MyAddress = @"Address Not founded";

                 if([placemark.addressDictionary objectForKey:@"SubAdministrativeArea"] != NULL)
                     city = [placemark.addressDictionary objectForKey:@"SubAdministrativeArea"];
                 else if([placemark.addressDictionary objectForKey:@"City"] != NULL)
                     city = [placemark.addressDictionary objectForKey:@"City"];
                 else if([placemark.addressDictionary objectForKey:@"Country"] != NULL)
                     city = [placemark.addressDictionary objectForKey:@"Country"];
                 else
                     city = @"City Not founded";

               NSLog(@"%@",city);
               NSLog(@"%@", MyAddress);
             }
         }];
    }
}

Problem

I am trying to get the current city and country using `CLLocationManager` with below code - ``` #pragma mark - Core Location Delegate Methods - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { CLGeocoder *reverseGeocoder = [[CLGeocoder alloc] init]; [reverseGeocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) { NSLog(@"reverseGeocodeLocation:completionHandler: Completion Handler called!"); if (error){ NSLog(@"Geocode failed with error: %@", error); return; } NSLog(@"Received placemarks: %@", placemarks); CLPlacemark *myPlacemark = [placemarks objectAtIndex:0]; NSString *countryCode = myPlacemark.ISOcountryCode; NSString *countryName = myPlacemark.country; NSString *city1 = myPlacemark.subLocality; NSString *city2 = myPlacemark.locality; NSLog(@"My country code: %@, countryName: %@, city1: %@, city2: %@", countryCode, countryName, city1, city2); }]; } - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { CLLocationDirection th=[newHeading trueHeading]; NSLog(@"True Heading value is=%f",th); CLLocationDirection magnetic=[newHeading magneticHeading]; NSLog(@"Magnetic Heading value is=%f",magnetic); } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSString *errorType = (error.code == kCLErrorDenied) ? NSLocalizedString(@"access_denied", @"") : NSLocalizedString(@"unknown_error", @""); UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"error_getting_location", @"") message:errorType delegate:nil cancelButtonTitle:NSLocalizedString(@"ok", @"") otherButtonTitles:nil]; [alert show]; } ``` It always gives the result with - My country code: IN, countryName: India, city1: (null), city2: (null) I don't know what may be the issue for this. Has anyone faced this issue that can't able to get the city name using `CLLocationManager`

Original source