didUpdateLocations no se llama

Estoy tratando de conseguir mi ubicación actual, pero el punto de quiebre en didUpdateLocations nunca es que se llama.

LocationManager:

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

Delegado método:

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

Me confirmó que los servicios de ubicación y habilitado y autorizado.

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

Gracias,
Mike

  • tenía el mismo problema un par de minutos, yo no había hecho el [[CLLocationManager alloc] init];. Aquí está el enlace que me ayudó a
  • intentar eliminar esta línea : [locationManager setDesiredAccuracy:kCLDistanceFilterNone]; como se establece setDesiredAccuracy dos veces, y hacer locationManager una propiedad
InformationsquelleAutor user2247438 | 2013-10-27

7 Kommentare

  1. 70

    Además en iOS8 debe tener dos cosas adicionales:

    • Agregar una clave a su Info.plist y pedir la autorización del administrador de ubicación pidiendo que se inicie.

      • NSLocationWhenInUseUsageDescription

      • NSLocationAlwaysUsageDescription

    • Que usted necesita para solicitar la autorización para la ubicación correspondiente del método.

      • [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/

    • la respuesta perfecta para mí.
    • No funciona para mí. Hay algunas cosas que faltan. Esta respuesta funciona.
    • Por favor, tenga en cuenta que en iOS 11, una tercera clave tiene que ser proporcionada a su información.plist: NSLocationAlwaysAndWhenInUseUsagedescription
  2. 30

    Cuando he tenido este problema, fue debido a un problema subprocesamiento.

    Asegúrese de que todos estos métodos son llamados en el hilo principal.
    Es muy importante, que no sólo la startUpdatingLocation método se llama en el hilo principal, pero los otros también.

    Puede forzar la ejecución de código en el hilo principal envolviendo dentro de

    dispatch_sync(dispatch_get_main_queue(), ^{
    
    });

    También echa un vistazo a esta respuesta.

    • Tengo el mismo problema que el anterior, pero cuando uso la solución, mi botón no se puede hacer clic después. Es curioso.
    • Bodeit Gracias tio… me salve su respuesta.
    • Debe haber pasado por alto… ¿qué botón estás hablando?
    • Desde mi experiencia, dispatch_async() es suficiente… Se pueden resolver los problemas de actualización de la interfaz de – sólo una suposición @dulax
  3. 9

    Asegúrese de que usted agrega CLLocationManager como una propiedad.

    @property (nonatomic , strong) CLLocationManager *locationManager;
    • Se parece a esto me ayudó de otra forma yo seguía recibiendo EXC_BAD_ACCESS errores. Gracias 🙂
  4. 6

    Sí, la propiedad fue la solución para mí, y una buena idea para comprobar el Servicio de Ubicación está activada:

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

    Usted tiene que decirle al simulador ubicación a simular. Si no especifica una ubicación de su CLLocationManager los métodos de delegado nunca será llamado. Usted puede utilizar el simulador de menú Debug -> su Ubicación. También en Xcode por la depuración de la zona hay un poco de ubicación de la flecha que aparece cuando se ejecuta la aplicación desde Xcode. Se puede utilizar para especificar un archivo GPX para simular el movimiento (que todavía no es el mismo que el dispositivo real, aunque).

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

  6. 2

    Por favor, tenga en cuenta que en iOS 11 y más tarde, una tercera clave tiene que ser proporcionada a su información.plist: NSLocationAlwaysAndWhenInUseUsagedescription

  7. 1

    Si CLLocationManagerDelegate se establece, MapView Delegado también se establece

    También Comprobar la ubicación del simulador, haga Clic en el Simulador > Depurar > Ubicación,
    si no es ninguno de cambio en la ciudad de ejecutar o de la autopista sin peaje de la unidad. Su trabajó para mí.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea