Moja aplikacja pobiera lokalizację użytkownika, współrzędne i podaje odległość do lub od miejsca docelowego lub pochodzenia. Wszystkie te możliwe miejsca docelowe są pokazane w widoku tabeli, więc współrzędne użytkowników otrzymuję w tym samym czasie, gdy zapełniam tabelę. Jedyną rzeczą jest to, że widok alertu, który pyta o lokalizację użytkownika, pojawia się, a następnie znika tak szybko, że nie można go kliknąć!
Czy istnieje sposób, aby ręcznie przedstawić ten alert po pierwszym załadowaniu aplikacji? Próbowałem uzyskać lokalizację użytkownika, gdy aplikacja się ładuje, aby wymusić wyświetlenie alertu, ale to nie zadziałało.
źródło
Ten sam symptom, inna przyczyna: nie dzwonić
startUpdatingLocation
więcej niż raz z rzędu .Przypadkowo ustrukturyzowałem rzeczy w taki sposób, że kod nieumyślnie dzwonił
startUpdatingLocation
dwa razy z rzędu, co najwyraźniej jest złe. Mogło to również mieć coś wspólnego z wyborem kolejki, ponieważ czekałem na rozpoczęcie aktualizacji w oczekiwaniu na wynik żądania sieciowego, ale nie musiałem robić żadnej magii GCD, aby to naprawić ... po prostu musiałem się upewnić, że nie powtórzył początku.Mam nadzieję, że ktoś może skorzystać z mojego bólu. :)
źródło
Miałem do czynienia z podobną sytuacją. Po debugowaniu znalazłem
jest wywoływana w zakresie metody, ale powinna być wywoływana globalnie.
Czemu?
W skrócie, locationManager został zwolniony po zwróceniu metody. Ale nie należy go udostępniać, dopóki użytkownik nie udzieli lub nie odmówi pozwolenia
źródło
Wpadam w ten sam problem (przynajmniej przez objawy). W moim przypadku problem tkwił w
- (void)applicationWillResignActive:(UIApplication *)application;
metodzie, w której zwalniałemCLLocationManager
instancję w ramach przygotowań do przejścia w tle. Jak go usunąłem i zostawiłem tylko w- (void)applicationDidEnterBackground:(UIApplication *)application;
problemie zniknął.Problem polega na tym, że alert lokalizacji rdzenia NIE zawiesza aplikacji, gdy jest ona nadal na pierwszym planie.
Mam nadzieję, że ci to pomoże, dużo czasu zajęło mi znalezienie tego drania :)
źródło
Wiem, że to bardzo późna odpowiedź. Ale może komuś pomóc. Zmierzyłem się również z tym samym problemem i spędziłem godzinę, aby zidentyfikować problem. Na początku mój kod wyglądał tak.
Teraz alert lokalizacji szybko zniknął. Kiedy odkomentuję ostatnią linię, działa poprawnie.
źródło
Na ten problem też natknąłem się, ale rozwiązanie w moim przypadku okazało się zupełnie inne niż przyjęta odpowiedź.
W mojej aplikacji dzwoniłem
stopUpdatingLocation
z adresuapplicationWillResignActive
. Był to problem, ponieważapplicationWillResignActive
jest wywoływany, gdy pojawia się okno dialogowe uprawnień. To powodowałostopUpdatingLocation
zaraz potemstartUpdatingLocation
, dlatego okno dialogowe natychmiast znikało.Rozwiązaniem było po prostu do rozmowy
stopUpdatingLocation
zapplicationDidEnterBackground
zamiast.źródło
Przydarzyło mi się to podczas korzystania z symulatora iOS. Ustaliłem, że dzieje się tak, ponieważ mój schemat uruchamiania symulował lokalizację. Myślę, że ma to taki sam efekt jak dzwonienie
locationManager.startUpdatingLocation()
podczas uruchamiania, więc zamykało okno dialogowe.Usunięcie zaznaczenia pola wyboru „Zezwalaj na symulację lokalizacji” w oknie dialogowym Edytuj schematy rozwiązało problem. Gdy będzie działać tak, jak chcesz, a uprawnienia zostaną ustawione, możesz ponownie włączyć symulację lokalizacji, a symulator będzie od tego momentu działał dobrze.
źródło
Swift 4 i iOS 11 :
Upewnij się, że do pliku dodano linie prywatności (zarówno zawsze, jak i kiedyInUse )
.plist
i dodajCoreLocation
Framework do projektuOkno dialogowe pozwolenia na lokalizację pojawia się poprawnie po zmianie:
z:
PS :. Próbowałem WSZELKIE rad i wszystko zawiedzie (upoważnienie do żądania
viewDidLoad
,var
zamiastlet
na locationManager, nie zaczynajstartUpdatingLocation()
po request..I że to błąd i mam nadzieję, że go rozwiązać jak najszybciej ..źródło
Rozwiązanie SWIFT 4 @Zoli będzie wyglądać następująco:
źródło
najczęściej definiujesz zmienną locationManager jako obiekt globalny.
źródło
Spotkałem się z tą samą twoją sytuacją.
źródło