Mi aplicación toma la ubicación del usuario, obtiene las coordenadas y proporciona una distancia hacia o desde su destino u origen. Todos estos destinos posibles se muestran en una vista de tabla, por lo que obtengo las coordenadas de los usuarios al mismo tiempo que llenan la tabla. ¡Lo único es que la vista de alerta que solicita la ubicación de los usuarios aparece y desaparece tan rápido que es imposible hacer clic en ella!
¿Hay alguna forma de presentar manualmente esta alerta cuando la aplicación se carga por primera vez? Traté de obtener la ubicación del usuario cuando la aplicación se carga para tratar de forzar que se muestre la alerta, pero eso no funcionó.
fuente
Mismo síntoma, causa diferente: no llame
startUpdatingLocation
más de una vez seguidas .Accidentalmente había estructurado cosas de tal manera que el código estaba llamando involuntariamente
startUpdatingLocation
dos veces seguidas, lo que aparentemente es malo. También podría haber tenido algo que ver con la elección de la cola, ya que estaba esperando comenzar a actualizar en espera del resultado de una solicitud de red, pero no necesitaba hacer ninguna magia GCD para solucionarlo ... solo necesitaba asegurarme de que No repitió el comienzo.Espero que alguien pueda beneficiarse de mi dolor. :)
fuente
Me he enfrentado a una situación similar. Después de depurar encontré
se llama en un alcance de método, pero debe llamarse globalmente.
¿Por qué?
En pocas palabras, locationManager se ha lanzado después de que el método haya regresado. Pero no debe publicarse hasta que el usuario otorgue o deniegue el permiso
fuente
Caigo en el mismo problema (al menos por síntomas). En mi caso, el problema estaba en el
- (void)applicationWillResignActive:(UIApplication *)application;
método, donde estaba lanzando miCLLocationManager
instancia como parte de la preparación para la transición de fondo. Cuando lo quité y lo dejé solo en- (void)applicationDidEnterBackground:(UIApplication *)application;
el problema desapareció.La parte complicada es que la alerta de ubicación central SI suspende su aplicación mientras está en primer plano.
Espero que te ayude, me llevó mucho tiempo encontrar a ese bastardo :)
fuente
Sé que esta es una respuesta muy tardía. Pero puede ayudar a alguien. También enfrenté el mismo problema y pasé una hora para identificar el problema. Al principio mi código era así.
Ahora la alerta de ubicación desapareció rápidamente. Cuando descomento la última línea, funciona correctamente.
fuente
También me encontré con este problema, pero la solución en mi caso resultó ser completamente diferente a la respuesta aceptada.
En mi aplicación, estaba llamando
stopUpdatingLocation
desdeapplicationWillResignActive
. Esto fue un problema porqueapplicationWillResignActive
se llama cuando aparece el diálogo de permiso. Esto estaba causandostopUpdatingLocation
inmediatamente despuésstartUpdatingLocation
, por lo que el diálogo desaparecería inmediatamente.La solución era simplemente llamar
stopUpdatingLocation
desde suapplicationDidEnterBackground
lugar.fuente
Esto me estaba sucediendo mientras usaba el simulador de iOS. Determiné que estaba ocurriendo porque mi Esquema de ejecución simulaba una ubicación. Creo que esto tiene el mismo efecto que llamar
locationManager.startUpdatingLocation()
en el lanzamiento y, por lo tanto, estaba cerrando el diálogo.Desmarcar la casilla de verificación "Permitir simulación de ubicación" en el cuadro de diálogo Editar esquemas solucionó el problema. Una vez que funcione como lo desee y se establezca el permiso, puede volver a habilitar la simulación de ubicación y el simulador funcionará bien a partir de ese momento.
fuente
Swift 4 y iOS 11 :
Asegúrese de haber agregado líneas de privacidad (tanto siempre como whenInUse ) a su
.plist
archivo y agregueCoreLocation
Framework a su proyectoEl diálogo de permiso de ubicación aparece correctamente cuando he cambiado:
con:
PD : He intentado TODOS los consejos y todo falla (solicitar autorización para
viewDidLoad
, envar
lugar delet
para locationManager, no comenzarstartUpdatingLocation()
después de la solicitud ... Creo que es un error y espero que lo resuelvan lo antes posible ...fuente
La solución SWIFT 4 @Zoli se verá así:
fuente
usted define más la variable locationManager como objeto global.
fuente
Me encontré con la misma situación tuya.
fuente