Po dodaniu komponentu MKMapView
do widoku w konstruktorze Interface, istnieją pola wyboru, które pozwalają skonfigurować co pokazuje:Jak korzystać z "Pokaż lokalizację użytkownika" MKMapView w iOS8?
Podczas sprawdzania „User Location”, automatycznie pokazuje lokalizację użytkownika na mapa.
Jednak od czasu instalacji systemu iOS 8 należy poprosić o pozwolenie na lokalizację przed wyświetleniem lokalizacji użytkownika. Jeśli tego nie zrobisz, pojawi się komunikat "Próba uruchomienia aktualizacji lokalizacji MapKit bez monitowania" w konsoli.
Więc dodałem NSLocationWhenInUseUsageDescription
klucz do plist, i dodaje ten kod do viewDidLoad
:
if CLLocationManager.authorizationStatus() == .NotDetermined {
CLLocationManager().requestWhenInUseAuthorization()
}
nie wydają się działać chociaż. Dostaję wyskakujące okienko z prośbą o pozwolenie, ale zanim wybieram odpowiedź, sama się ukrywa, mapa ładuje się pod nią i otrzymuję ostrzeżenie w konsoli.
Wiem, że mogę ustawić właściwość showsUserLocation
w kodzie zamiast tego, tylko po uzyskaniu pozwolenia; ale chodzi mi o to, że jest to pole wyboru w IB, które powinno robić to samo, z wyjątkiem, że natychmiast rozpoczyna śledzenie. Czy to oznacza, że nie powinniśmy używać tego pola wyboru od czasu iOS 8? Czy używam go niepoprawnie?
-
Aktualizacja: faktycznie, Skóry popup przez siebie niezależnie czy „pokazuje lokalizację użytkownika” jest ustawiona czy nie. Próbowałem zrobić to w viewWillAppear
lub viewDidAppear
, ale to nie pomogło. Więc nie jestem pewien, gdzie dokładnie mam zadzwonić requestwhenInUseAuthorization
podczas używania MKMapView
...
Ach, masz rację, ARC pozwala mi całkowicie zapomnieć o zarządzaniu pamięcią i czasami prowadzi do takich rzeczy. Wygląda na to, że w ogóle nie wyświetla się pop-up, jeśli nie zatrzymam menedżera. Jeśli tak, to działa tak, jak powinno, dzięki. –
Cieszę się, że mogę Ci pomóc! :) – TonyMkenu
Miło Myślę, że odniesienie do delegata nie wystarczy, aby utrzymać instancję wokół. Dzięki jeszcze raz! – Quincy