[英]Swift: Location permission popup keeps closing
在Swift中試圖獲得用戶的經度和緯度時,我遇到了一個問題。 我有一個按鈕,它運行一個函數來獲取用戶的坐標,第一次按下它時,它應該請求允許給應用程序你的位置。 但是,我遇到的問題是,在我按下獲取位置按鈕后,此彈出窗口將自動關閉。
這是發生的事情: http : //imgur.com/a/0wdnm
這是我的代碼:
class location: NSObject, CLLocationManagerDelegate {
var locationManager = CLLocationManager()
internal func getLocation() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
if CLLocationManager.authorizationStatus() == .AuthorizedAlways {
locationManager.startUpdatingLocation()
} else if CLLocationManager.authorizationStatus() == .NotDetermined {
locationManager.requestAlwaysAuthorization()
} else if CLLocationManager.authorizationStatus() == .Denied {
print("User denied location permissions.")
}
}
// MARK : CLLocationManagerDelegate protocol
@objc
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location: CLLocationCoordinate2D = (locationManager.location?.coordinate)!
print(location.latitude)
print(location.longitude)
}
}
這里有一些適合我的代碼。 有些事情需要注意:
CLLocationManager
。 如果用戶尚未啟用CoreLocation,那么他們將在創建位置管理器時收到警報,這可能是您的應用啟動時(可能是您想要的,也可能不是)。 requestAlwaysAuthorization
需要Info.plist中的[NSLocationAlwaysUsageDescription][1]
條目。 locationManager:didChangeAuthorizationStatus:
如果服務不可用,則停止位置管理器。 碼:
import UIKit
import CoreLocation
class LocationViewController: UIViewController, CLLocationManagerDelegate {
var locationManager: CLLocationManager?
internal func getLocation() {
if locationManager == nil {
locationManager = CLLocationManager()
locationManager?.delegate = self
locationManager?.desiredAccuracy = kCLLocationAccuracyBest
}
if CLLocationManager.authorizationStatus() == .AuthorizedAlways {
locationManager?.startUpdatingLocation()
} else if CLLocationManager.authorizationStatus() == .NotDetermined {
locationManager?.requestAlwaysAuthorization()
} else if CLLocationManager.authorizationStatus() == .Denied {
print("User denied location permissions.")
}
}
// MARK : CLLocationManagerDelegate protocol
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
switch status {
case .AuthorizedAlways, .AuthorizedWhenInUse:
locationManager?.startUpdatingLocation()
default:
locationManager?.stopUpdatingLocation()
}
}
@objc func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locationManager?.location?.coordinate else {
return
}
print(location.latitude)
print(location.longitude)
}
}
extension LocationViewController {
@IBAction internal func buttonTapped(sender: AnyObject) {
getLocation()
}
}
當出現位置權限彈出窗口時,您不應再訪問位置。您只需等待用戶權限,而不是繼續使用位置相關功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.