el administrador de ubicación se creó en una cola de despacho

¿Qué significa este mensaje?

AVISO: se creó un administrador de ubicación (0xe86bdf0) en una cola de despacho que se ejecuta en un subproceso que no es el subproceso principal. Es responsabilidad del desarrollador asegurarse de que haya un bucle de ejecución ejecutándose en el subproceso en el que se asigna el objeto del administrador de ubicación. En particular, no se admite la creación de administradores de ubicación en colas de despacho arbitrarias (no adjuntas a la cola principal) y dará como resultado que no se reciban las devoluciones de llamada.

preguntado el 22 de mayo de 12 a las 18:05

Gracias a las respuestas a continuación. solo tenía que mover todo a la clase AppDelegate. -

3 Respuestas

Debe crear CLLocationManager en un subproceso con un bucle de ejecución activo, como el subproceso principal. No debe crearlo en un subproceso de fondo. Ver Referencia de clase CLLocationManager para más información:

(La configuración de su objeto de administrador de ubicación siempre debe ocurrir en un subproceso con un ciclo de ejecución activo, como el subproceso principal de su aplicación).

Si está interesado en qué es exactamente un bucle de ejecución, consulte Ejecutar bucles para más información.

contestado el 22 de mayo de 12 a las 18:05

Hasta donde usted sabe, ¿este problema está relacionado solo con el GPS? Porque con CMMotionManager (acelerómetro, por ejemplo) no veo este problema. - Matteopuc

Con Swift 3, lo siguiente garantizará que su función se ejecute en el hilo principal:

OperationQueue.main.addOperation{"your location manager init code"}

Respondido 19 Oct 16, 19:10

OperationQueue es una característica poderosa. funcionó para mí - MEH

Lo mismo está disponible para ObjC: [[NSOperationQueue mainQueue] addOperationWithBlock:^{}] - Koen

Significa que si creó un administrador de ubicación en otro subproceso además del subproceso "Principal" (es decir, el subproceso donde se ejecuta todo el código de la interfaz de usuario de su aplicación), debe asegurarse de llamarlo siempre (es decir, el administrador de ubicación) del hilo que lo creó.

Para depurar el problema en su código, es posible que desee envolver la creación de (y las llamadas a) el administrador de ubicación dentro de una cola de envío para el hilo principal de la siguiente manera:

dispatch_sync(dispatch_get_main_queue(),^ {
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
});

y:

dispatch_sync(dispatch_get_main_queue(),^ {
  [self.locationManager startUpdatingLocation];
});

O algo así para ver si el mensaje de error desaparece.

contestado el 22 de mayo de 12 a las 18:05

por alguna razón, esta solución bloquea mi hilo principal cuando trato de usarlo. - s.maks

Esta fue una solución de depuración, una forma de averiguar qué está pasando al forzar una ejecución en la cola principal. Creo que es posible que tengas una comprensión retrógrada de la sugerencia. - Soleada

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.