CLLocationManager 突然只在 Device 上返回 New York, NY?

CLLocationManager suddenly only returning New York, NY on Device?

此代码一直运行可靠,但最近(至少在我的手表上)它总是返回纽约,纽约,无论我身在何处?核心位置有什么变化吗?

import CoreLocation


class WorkoutLocationManager: NSObject, CLLocationManagerDelegate {
    
    private var locationManager: CLLocationManager?
    public var formattedWorkoutAddress: String?
    
    public func getWorkoutLocation() {
        guard CLLocationManager.locationServicesEnabled() else {
            print("User does not have location services enabled")
            return
        }
        
        locationManager = CLLocationManager()
        locationManager?.delegate = self
        locationManager?.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        
        let locationAuthorizationStatus = CLLocationManager.authorizationStatus()
        
        switch locationAuthorizationStatus {
        case .authorizedAlways:
            print("location authorized Always")
            locationManager?.requestLocation()
        case .authorizedWhenInUse:
            print("location authorized When in Use")
            locationManager?.requestLocation()
        case .denied:
            print("location authorization denied")
        case .notDetermined:
            print("location authorization not determined")
            
        case .restricted:
            print("location authorization restricted")
            
        default: () 
        }
        
    }
    
   
    // MARK: - CLLocationManagerDelegate
    
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
               
                guard let currentLocation = locations.first else { return }
    
                let geocoder = CLGeocoder()
                geocoder.reverseGeocodeLocation(currentLocation) { (placemarksArray, error) in
                    
                    if let unwrappedError = error  {
                        print("Geocoder error: \(unwrappedError)")
                    }
                    
                    guard let placemarksArrayUnwrapped = placemarksArray else  { return }
        
                    if placemarksArrayUnwrapped.count > 0 {
        
                        if let placemark = placemarksArray?.first {
                            
                            let locality = placemark.locality ?? ""
                            let state = placemark.administrativeArea ?? ""
                            
                            let workoutLocationAsString = (locality + " " + state)
                            print("workoutLocationAsString = \(workoutLocationAsString)")
                            self.formattedWorkoutAddress = workoutLocationAsString
                            
                        } else { print("no placemark")}
                    } else { print("placemark.count = 0")}
                }
    }
    
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("location manager error = \(error)")
    }
    
    //I added this code below to prevent getting the error "Failure to deallocate CLLocationManager on the same runloop as its creation may result in a crash" code is from this answer: 
    
    override init() {
        super.init()
        self.performSelector(onMainThread: #selector(initLocationManager), with: nil, waitUntilDone: true)
    }
    
    @objc private func initLocationManager() {
        self.locationManager = CLLocationManager()
        self.locationManager?.delegate = self
    }
    
    @objc private func deinitLocationManager() {
        locationManager = nil
    }
    
    deinit {
        self.performSelector(onMainThread: #selector(deinitLocationManager), with: nil, waitUntilDone: true)
    }

}

我终于想通了,我的Scheme中确实设置了默认位置NY/NY...我一定是很久以前做的忘记了‍♂️