La vista de alerta desaparece por sí sola al llamar a [LocationManager requestWhenInUseAuthorization];


Estoy llamando

[locationManager requestWhenInUseAuthorization];

En una pantalla que muestra un MKMapView (showsUserLocation = YES). Lo que parece raro en primer lugar (Apple debería manejar esto para MKMapView automáticamente, pero XCode se quejaba cuando no lo hice).

Así que obtengo la vista de alerta que dice que la aplicación quiere usar su ubicación, pero luego la vista de alerta desaparece por sí sola.

¿Por qué la vista de alerta desaparece por sí sola?

Lo único que puedo pensar es que estoy llamando requestWhenInUseAuthorization en el método initWithCoder. Solo estoy haciendo eso porque creo que vi la queja de Xcode cuando la llamé desde viewDidLoad.

Author: Falko, 2014-11-20

1 answers

Probablemente estés siendo ARC'd. Asegúrate de que todavía tienes una referencia a tu CLLocationManager. Usted puede hacer esto fácilmente por lo que es una propiedad.

ARC significa Conteo automático de referencias. En un proyecto habilitado para ARC (y a menos que esté trabajando en algo realmente antiguo o lo haya apagado a propósito, su proyecto es un proyecto habilitado para ARC), necesita mantener referencias a objetos que usará más adelante. CLLocationManager no devuelve un singleton por lo que necesita mantener un referencia a ella en sus clases que se preocupan. Algo como esto:

@property (strong, nonatomic) CLLocationManager *locationManager

Vea la documentación de ARC de Apple para más detalles. (Y gracias a Falko por buscar el vínculo profundo con eso.)

Estoy insertando el comentario de Gobe en caso de que no te hayas desplazado para leerlo.

Para Swift: en lugar de crear un objeto LocationManager de ámbito local, déjalo como una propiedad de tus clases que se preocupan, como private let LocationManager = CLLocationManager () y luego usarlo normalmente como auto.LocationManager.Solicitud cuando se utiliza la autorización()

 83
Author: Paul Cezanne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-01 15:37:16