Я создаю приложение, используя UITabBar, и одним из элементов вкладки является карта. Я хочу, чтобы пользователь отвечал на запрос LocationService () только при нажатии на вкладку карты. Однако, когда приложение загружается в tabBar, первым делом появляется запрос разрешения местоположения.
Вот код для LocationService ()
import CoreLocation
protocol LocationServiceDelegate: class {
func authorizationDenied()
func setMapRegion(center: CLLocation)
}
class LocationService: NSObject {
var locationManager = CLLocationManager()
weak var delegate: LocationServiceDelegate?
override init() {
super.init()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
}
private func checkAuthorizationStatus() {
switch CLLocationManager.authorizationStatus() {
case .notDetermined:
locationManager.requestAlwaysAuthorization()
case .denied:
delegate?.authorizationDenied()
case .authorizedAlways, .authorizedWhenInUse:
startUpdatingLocation()
default:
break
}
}
private func startUpdatingLocation() {
locationManager.startUpdatingLocation()
}
}
extension LocationService: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
checkAuthorizationStatus()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
locationManager.stopUpdatingLocation()
if let location = locations.last {
delegate?.setMapRegion(center: location)
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print(error.localizedDescription)
}
}
Первоначально метод вызывался в viewDidLoad, поэтому карта была бы в центре местоположения пользователя, поэтому я переместил его в viewDidAppear, но я все равно получаю такое же уведомление при запуске приложения.
Как отложить запрос на разрешение до тех пор, пока пользователь фактически не нажмет на вкладку карты - в этом случае вкладка DIY Stores?