¿Cómo usa la location principal sin compartir / otorgar permiso de usuario?

He implementado la location central en mi aplicación.

Todo funciona perfecto cuando el usuario permite compartir la location al inicio de la aplicación.
Pero cuando el usuario no comparte su location, "South atlantic" se muestra en el campo de location de la aplicación.

Qué debe hacerse para evitar esto y qué debe mostrarse cuando el usuario no comparte su location.

Estoy usando este código para get la location:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; [self.window makeKeyAndVisible]; locationManager = [[CLLocationManager alloc] init]; locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move locationManager.desinetworkingAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation]; CLGeocoder *ceo = [[CLGeocoder alloc]init]; CLLocation *loc = [[CLLocation alloc]initWithLatitude:locationManager.location.coordinate.latitude longitude:locationManager.location.coordinate.longitude]; //insert your coordinates [ceo reverseGeocodeLocation: loc completionHandler: ^(NSArray *placemarks, NSError *error) { CLPlacemark *placemark = [placemarks objectAtIndex:0]; NSLog(@"placemark %@",placemark); //String to hold address locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]; NSLog(@"addressDictionary %@", placemark.addressDictionary); NSLog(@"placemark %@",placemark.region); NSLog(@"placemark %@",placemark.country); // Give Country Name NSLog(@"placemark %@",placemark.locality); // Extract the city name NSLog(@"location %@",placemark.name); NSLog(@"location %@",placemark.ocean); NSLog(@"location %@",placemark.postalCode); NSLog(@"location %@",placemark.subLocality); NSLog(@"location %@",placemark.location); //Print the location to console NSLog(@"I am currently at %@",locatedAt); }]; return YES; } - (NSString *)deviceLocation { NSString *theLocation = [NSString stringWithFormat:@"latitude: %f longitude: %f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude]; return theLocation; } 

Consulte la Guía de progtwigción de la concientización de la location para get información sobre cómo get la location del usuario. En resumen, debe crear el CLLocationManager location de CLLocationManager (como usted), pero luego iniciar un service de location (el service de location de cambio significativo de baja potencia o el service de location estándar) y esperar a que el método didUpdateLocations devuelva un location (o para didFailWithError para informar un error, ya sea porque la aplicación falló la autorización o porque el dispositivo no pudo satisfacer la request de location por algún motivo). No puede, sin embargo, simplemente tomar la location del CLLocationManager . Tienes que esperar a que el service llame a didUpdateLocations antes de comenzar de manera confiable a usar longitudes y latitudes.

La Guía de progtwigción de la concientización de la location lo guiará por todo esto, incluidas algunas muestras de códigos muy útiles.

Puede verificar [CLLocationManager authorizationStatus] para verificar que el usuario haya permitido los services de location que utilizan algo como

 int result = [CLLocationManager authorizationStatus]; 

Tiene valores de retorno en

 typedef enum { kCLAuthorizationStatusNotDetermined = 0, kCLAuthorizationStatusRestricted, kCLAuthorizationStatusDenied, kCLAuthorizationStatusAuthorized } CLAuthorizationStatus;