example bar ios objective-c xcode cllocationmanager cllocation

ios - bar - didUpdateLocations no se llama



uisearchbar swift 4 (7)

Además en iOS8 debes tener dos cosas extra:

  • Agregue una clave a su Info.plist y solicite autorización al administrador de ubicación para que comience.

    • NSLocationWhenInUseUsageDescription

    • NSLocationAlwaysUsageDescription

  • Es necesario solicitar autorización para el método de ubicación correspondiente.

    • [self.locationManager requestWhenInUseAuthorization]

    • [self.locationManager requestAlwaysAuthorization]

Ejemplo de código:

self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; // Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7. if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { [self.locationManager requestWhenInUseAuthorization]; } [self.locationManager startUpdatingLocation];

Fuente: http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/

Estoy intentando obtener mi ubicación actual, pero nunca se llama al punto de interrupción en didUpdateLocations.

Gerente de locación:

locationManager = [[CLLocationManager alloc] init]; [locationManager setDelegate:self]; [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; [locationManager setDesiredAccuracy:kCLDistanceFilterNone]; [locationManager startUpdatingLocation];

Método del delegado:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;

Confirmé que los servicios de localización y habilitados y autorizados.

¿Por qué el método delegado locationManager no se llama como debería?

Gracias Mike


Asegúrese de haber agregado CLLocationManager como una propiedad.

@property (nonatomic , strong) CLLocationManager *locationManager;


Cuando tuve este problema, se debió a un problema de subprocesos.

Asegúrese de que todos estos métodos se llaman en el hilo principal. Es muy importante que no solo se startUpdatingLocation método startUpdatingLocation en el subproceso principal, sino también a los otros.

Puede forzar que el código se ejecute en el hilo principal envolviéndolo dentro

dispatch_sync(dispatch_get_main_queue(), ^{ });

También echa un vistazo a esta respuesta .


Sí, la propiedad fue la solución para mí y es una buena idea verificar que el Servicio de ubicación esté habilitado:

if ([CLLocationManager locationServicesEnabled]) { self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; [self.locationManager startUpdatingLocation]; }


Si se establece CLLocationManagerDelegate, MapView Delegate también se configura

También verifique la ubicación del simulador, haga clic en Simulador> Depurar> Ubicación, si no hay ningún cambio en el funcionamiento de la ciudad o la unidad de la autopista. Ha funcionado para mí.


Tenga en cuenta que en iOS 11 y versiones posteriores, se debe proporcionar una tercera clave a su lista de información: NSLocationAlwaysAndWhenInUseUsageDescription


Tienes que decirle al simulador qué ubicación simular. Si no especifica una ubicación, nunca se llamará a los métodos de delegado de CLLocationManager . Puede utilizar el menú del simulador Depurar -> Ubicación. También en Xcode, junto al área de depuración, hay una pequeña flecha de ubicación que aparece cuando se ejecuta la aplicación desde Xcode. Puede usar eso para especificar un archivo GPX para simular el movimiento (aunque no es lo mismo que el dispositivo real).

https://devforums.apple.com/message/1073267#1073267