У меня есть класс для управления отслеживанием местоположения (CLLocationManagerDelegate) и отдельный класс для моего vc (UIViewController). Я инициирую экземпляр моего класса местоположения в VC. Когда класс инициируется, запрашивается авторизация местоположения, и после того, как это принято или отклонено, я хочу перейти в другой VC, чтобы продолжить запросы на разрешение для приложения (уведомлений).Приостановка segue до тех пор, пока не будет предоставлен доступ/разрешен доступ
Прямо сейчас появляется тостер-запросчик, а пользовательский интерфейс переходит к следующему VC в фоновом режиме, прежде чем принимать или отклонять.
Любые предложения по доступу к делегату класса моего местоположения - locationManager (_: didChangeAuthorization) func из моего класса VC или лучшая идея о том, как это сделать?
Идея заключается не в том, чтобы класс VC стал CLLocationManagerDelegate. '
Мое расположение Класс:
class MyLocation: NSObject, CLLocationManagerDelegate {
static let sharedManager = MyLocation()
var locationManager = CLLocationManager()
var allDelegates = NSHashTable<CLLocationManagerDelegate>.weakObjects()
....
....
func performOnDelegates(_ aBlock:(CLLocationManagerDelegate) ->()) {
let hashTable = isObservingHighPrecisionLocationUpdates ? highPrecisionDelegates : allDelegates
let locationManagerDelegates = hashTable.allObjects
for aDelegate in locationManagerDelegates {
aBlock(aDelegate)
}
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
print("LOCATION SERVICES: Re-evaluating state after authorization state changed")
performOnDelegates { $0.locationManager?(manager, didChangeAuthorization: status) }
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
performOnDelegates { $0.locationManager?(manager, didUpdateLocations: locations) }
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("WARNING: Location update failed with error = \(error)")
performOnDelegates { $0.locationManager?(manager, didFailWithError: error) }
}
}
Мой View Controller Класс:
import UIKit
class MyViewController: UIViewController, CLLocationManagerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func didTapNext(_ sender: UIButton) {
if sender.restorationIdentifier == "locationAccessButton" {
MyLocation.sharedManager.locationManager.requestWhenInUseAuthorization()
performSegue(withIdentifier: "nextPermissionSegue", sender: nil)
}
}
}
}