У меня есть этот код:
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
override func viewDidLoad() {
self.locationManager.requestWhenInUseAuthorization()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
super.viewDidLoad()
}
@IBAction func sendLocation() {
locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let coordinate = locations.last?.coordinate else { return }
print(String(coordinate.latitude))
locationManager.stopUpdatingLocation()
}
}
При звонке на UIButton
вызывается IBAction
, и текущее местоположение пользователя отображается в консоли.
Поскольку мне нужно получить местоположение только один раз, я хотел бы использовать locationManager.requestLocation()
.
Но при удалении locationManager.stopUpdatingLocation()
и замене locationManager.startUpdatingLocation()
на locationManager.requestLocation()
приложение вылетает при нажатии UIButton
со следующими журналами в консоли:
2019-01-09 15: 48: 36.585518 + 0100 GetLocation [1206: 248754] *** Утверждение
ошибка в - [CLLocationManager requestLocation],
/BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreLocationFramework/CoreLocation-2245.8.25/Framework/CoreLocation/CLLocationManager.m:897
2019-01-09 15: 48: 36.586443 + 0100 GetLocation [1206: 248754] ***
Завершение приложения из-за необработанного исключения
«NSInternalInconsistencyException», причина: «Делегат должен ответить на
locationManager: didFailWithError: '
*** Стек первого вызова:
(0x1b4e08ec4 0x1b3fd9a50 0x1b4d1eb3c 0x1b580d1d0 0x1bbcd8280
0x104690028 0x10469005c 0x1e20f23f8 0x1e1b7ffb8 0x1e1b802d8
0x1e1b7f2d8 0x1e212bb50 0x1e212cdb4 0x1e210c0b0 0x1e21daf1c
0x1e21dd914 0x1e21d6404 0x1b4d991f0 0x1b4d99170 0x1b4d98a54
0x1b4d93920 0x1b4d931f0 0x1b700c584 0x1e20f0ce4 0x104691564
0x1b4852bb4)
libc ++ abi.dylib: завершается с необработанным исключением типа
NSException
(lldb)
Почему это? Что я делаю не так?