Aplikasi saya mengambil lokasi pengguna, mendapatkan koordinat, dan menyediakan jarak ke atau dari tujuan atau asal mereka. Semua tujuan yang mungkin ini ditampilkan dalam tampilan tabel, jadi saya mendapatkan pengguna mengoordinasikan pada saat yang sama saat mengisi tabel. Satu-satunya hal adalah, tampilan peringatan yang menanyakan lokasi pengguna muncul kemudian menghilang begitu cepat sehingga tidak mungkin untuk mengkliknya!
Apakah ada cara untuk menampilkan lansiran ini secara manual saat aplikasi pertama kali memuat? Saya mencoba mendapatkan lokasi pengguna ketika aplikasi memuat untuk mencoba dan memaksa lansiran untuk ditampilkan, tetapi itu tidak berhasil.
sumber
Gejala yang sama, penyebab berbeda: jangan menelepon
startUpdatingLocation
lebih dari satu kali berturut-turut .Saya tidak sengaja menyusun hal-hal sedemikian rupa sehingga kode itu secara tidak sengaja memanggil
startUpdatingLocation
dua kali berturut-turut, yang tampaknya buruk. Mungkin juga ada hubungannya dengan pilihan antrian karena saya menunggu untuk mulai memperbarui sambil menunggu hasil permintaan jaringan, tapi saya tidak perlu melakukan sihir GCD untuk memperbaikinya ... hanya perlu memastikan saya tidak mengulangi awal.Semoga seseorang dapat mengambil manfaat dari rasa sakit saya. :)
sumber
Saya telah menghadapi situasi yang sama. Setelah debugging saya temukan
disebut dalam lingkup metode, tetapi harus disebut secara global.
Mengapa?
Singkatnya, locationManager telah dirilis setelah metode kembali. Tapi itu tidak boleh dirilis sampai pengguna memberikan atau menolak izin
sumber
Saya jatuh ke masalah yang sama (setidaknya oleh gejala). Dalam kasus saya masalahnya ada pada
- (void)applicationWillResignActive:(UIApplication *)application;
metode, di mana saya merilisCLLocationManager
contoh saya sebagai bagian dari persiapan untuk transisi latar belakang. Ketika saya menghapusnya dan meninggalkannya hanya dalam- (void)applicationDidEnterBackground:(UIApplication *)application;
masalah hilang.Bagian yang sulit adalah peringatan Lokasi Inti DO menangguhkan aplikasi Anda saat masih di latar depan.
Semoga itu akan membantu Anda, butuh banyak waktu untuk menemukan bajingan itu :)
sumber
Saya tahu ini adalah jawaban yang sangat terlambat. Tapi itu bisa membantu seseorang. Saya juga menghadapi masalah yang sama dan menghabiskan satu jam untuk mengidentifikasi masalah ini. Awalnya kode saya seperti ini.
Sekarang peringatan lokasi dihilangkan dengan cepat. Ketika saya batalkan komentar pada baris terakhir itu berfungsi dengan benar.
sumber
Saya juga mengalami masalah ini, tetapi solusi dalam kasus saya ternyata sangat berbeda dari jawaban yang diterima.
Di aplikasi saya, saya menelepon
stopUpdatingLocation
dariapplicationWillResignActive
. Ini adalah masalah karenaapplicationWillResignActive
dipanggil ketika dialog izin muncul. Ini menyebabkanstopUpdatingLocation
segera setelah itustartUpdatingLocation
, itulah sebabnya dialog akan segera menghilang.Solusinya adalah hanya untuk panggilan
stopUpdatingLocation
dariapplicationDidEnterBackground
sebaliknya.sumber
Ini terjadi pada saya saat menggunakan Simulator iOS. Saya memutuskan bahwa itu terjadi karena Skema Run saya mensimulasikan lokasi. Saya pikir ini memiliki efek yang sama dengan menelepon
locationManager.startUpdatingLocation()
saat peluncuran dan jadi itu menutup dialog.Hapus centang pada kotak centang "Izinkan Simulasi Lokasi" dalam dialog Edit Skema memperbaiki masalah. Setelah berfungsi sesuai keinginan dan izin ditetapkan, Anda dapat mengaktifkan kembali simulasi lokasi dan simulator akan berfungsi dengan baik sejak saat itu.
sumber
Swift 4 dan iOS 11 :
Pastikan Anda telah menambahkan jalur privasi ( selalu dan saat digunakan ) ke
.plist
file Anda dan tambahkanCoreLocation
Framework ke proyek AndaDialog izin lokasi muncul dengan benar ketika saya berubah:
dengan:
PS .: Saya sudah mencoba SEMUA saran dan semuanya gagal (minta otorisasi untuk
viewDidLoad
,var
alih-alihlet
untuk locationManager, jangan mulaistartUpdatingLocation()
setelah permintaan..Saya pikir itu bug dan saya berharap mereka akan menyelesaikannya sesegera mungkin ..sumber
Solusi SWIFT 4 @Zoli akan terlihat seperti:
sumber
Anda paling mendefinisikan variabel locationManager sebagai objek global.
sumber
Saya bertemu dengan situasi Anda yang sama.
sumber