我試圖在按下按鈕時獲取用戶的位置,但是我無法設置位置代碼。我一直在尋找Stackoverflow上的各種答案,但我無法爲我工作。無法在Swift中獲得一次性用戶位置
class MyViewController: UIViewController, CLLocationManagerDelegate {
var locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
if status == .AuthorizedAlways || status == .AuthorizedWhenInUse {
let latitude = self.locationManager.location?.coordinate.latitude
let longitude = self.locationManager.location?.coordinate.longitude
print("coordinates:")
print(latitude)
print(longitude)
}
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locationValue : CLLocationCoordinate2D = manager.location!.coordinate
print("locations = \(locationValue.latitude) \(locationValue.longitude)")
}
不過,我剛剛得到來自打印尼爾斯在didChangeAuthorizationStatus
和從來都沒有從didUpdateLocations
打印。我也很困惑在哪裏把startUpdatingLocation()
。有些答案將它直接放在viewDidLoad
中,正如我在這裏,其他人將它放在didChangeAuthorizationStatus
中,我看到它在didLoad中的另一個地方if CLLocationManager.locationServicesEnabled()
。什麼是正確的方法來做到這一點?還有我做錯了,我沒有得到任何值打印?我在模擬器上運行,打開位置並允許彈出窗口的權限,並將模擬器設置爲緯度/經度自定義位置,並且我已將值添加到pList中。
編輯:even tried copy/pasting the code from this to get user's location only once但它返回(kCLErrorDomain error 0.)
。我在代碼中添加了'requestWhenInUseAuthorization()`,但仍然失敗。從打印
它會幫助你看到有效的代碼嗎? https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch22p773location/ch35p1032location/ViewController.swift – matt
至於'requestLocation',只是在我的編輯中添加了這個,但我試過了,它仍然出現失敗。 https://www.hackingwithswift.com/example-code/location/how-to-request-a-users-location-only-once-using-requestlocation我在模擬器中設置了一個位置,不應該這樣工作嗎?我會嘗試連接我的iPhone,看看它是否有任何不同 –
酷,請讓我知道,如果這有幫助。 – matt