Swift startMonitoringSignificantLocationChanges()不';不能在物理设备上工作

Swift startMonitoringSignificantLocationChanges()不';不能在物理设备上工作,swift,cllocationmanager,Swift,Cllocationmanager,当locationManager设置为startMonitoringSignificationLocationChanges()时,我在物理设备上显示位置时遇到问题 一切都在模拟器中工作,但当我让它在iPhone上运行时,并没有返回坐标,如果我将其更改为startUpdatingLocation(),它在我的物理设备上工作 你知道会出什么问题吗 我的代码: let locationManager = CLLocationManager() override func viewDidL

当locationManager设置为
startMonitoringSignificationLocationChanges()
时,我在物理设备上显示位置时遇到问题

一切都在模拟器中工作,但当我让它在iPhone上运行时,并没有返回坐标,如果我将其更改为
startUpdatingLocation()
,它在我的物理设备上工作

你知道会出什么问题吗

我的代码:

  let locationManager = CLLocationManager()
    override func viewDidLoad() {
        super.viewDidLoad()

        startReceivingSingificantLocationChanges()
    }

    func startReceivingSingificantLocationChanges() {

        if !CLLocationManager.significantLocationChangeMonitoringAvailable() {
            //the service is not available
            print("Service is not available")
            return
        }

        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.startMonitoringSignificantLocationChanges()
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.first{
            print(location.coordinate)
            coordinatesLbl.text = "LAT:\(location.coordinate.latitude) LONG:\(location.coordinate.longitude)"
        }
    }

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        if status == CLAuthorizationStatus.denied{
            showLocationDisabledPopUp()
            print("didChangeAuthorization")
        }
    }
startMonitoringSignificantLocationChanges()上,状态为:

应用程序可以在设备距离上一次通知移动500米或以上时收到通知。它不应期望通知频率超过每五分钟一次。如果设备能够从网络中检索数据,则位置管理器更有可能及时发送通知

因此,在使用这种方法时,您不应该经常期望它们


startUpdatingLocation
更新的频率更高,这就是为什么它能工作的原因

我试过这个,也有同样的问题。最后,我将位置
desiredAccuracy
设置为
KCallocationAccuracykilometer
。这产生了预期的效果,使我的位置发生了重大变化。另一种方法是使用
startUpdatingLocation
,一旦您有了当前位置,将位置管理器更改为
startMonitoringSignificantLocationChanges

,谢谢您的回复,但它不应该给您当前位置,然后在500-1公里后更新它吗?现在它根本不返回坐标。文档说
要传递的第一个事件通常是最近缓存的位置事件(如果有)
,因此您可能无法获得第一个