speed - ios swift cllocationmanager



La visualizzazione degli avvisi scompare autonomamente quando si chiama[locationManager requestWhenInUseAuthorization]; (1)

sto chiamando

[locationManager requestWhenInUseAuthorization];

su una schermata che mostra un MKMapView ( showsUserLocation = YES ). Che sembra strano in primo luogo (Apple dovrebbe gestire questo per MKMapView automaticamente, ma XCode si lamentava quando non l'ho fatto).

Quindi ottengo la vista di avviso che dice che l'applicazione vuole utilizzare la posizione, ma poi la vista di avviso scompare da sola.

Perché la vista degli avvisi scompare da sola?

L'unica cosa che posso pensare è che sto chiamando requestWhenInUseAuthorization nel metodo initWithCoder . Lo sto facendo solo perché penso di aver visto il reclamo Xcode quando lo chiamavo da viewDidLoad.

https://src-bin.com


Answer #1

Probabilmente stai facendo ARC. Assicurarsi di avere ancora un riferimento a CLLocationManager. Puoi farlo facilmente rendendolo una proprietà.

ARC sta per Automatic Reference Counting. In un progetto abilitato ARC (ea meno che tu non stia lavorando su qualcosa di molto vecchio o lo hai disattivato di proposito, il tuo progetto è un progetto abilitato ARC) devi mantenere i riferimenti agli oggetti che userai in seguito. CLLocationManager non restituisce un singleton quindi è necessario mantenere un riferimento ad esso nelle classi a cui interessa. Qualcosa come questo:

@property (strong, nonatomic) CLLocationManager *locationManager

Vedi la documentazione ARC di Apple per i dettagli. (E grazie Falko per la ricerca del profondo legame con quello.)

Inserisco il commento di Gobe in linea nel caso in cui non si scorre per leggerlo.

Per Swift: invece di creare un oggetto locationManager dell'ambito locale, lasciare che sia una proprietà delle classi a cui interessa, come private let locationManager = CLLocationManager () e quindi usarlo normalmente come self.locationManager.requestWhenInUseAuthorization ()





core-location