Ios CLLocation Manager有时给出错误的位置

Ios CLLocation Manager有时给出错误的位置,ios,core-location,Ios,Core Location,我正在使用iOS CLLocation manager的核心位置API,它有时会给我错误的位置,比如我在美国,它会给我西班牙的纬度和经度。搜索了相同的堆栈覆盖流,但无法为我的查询获得相关答案。作为使用地图和位置的新手,我有点困惑。非常感谢您的帮助。我假设您使用的是物理设备,而不是模拟器来测试此功能,并且您没有选择在xcode中模拟位置的选项。有时候,CLLocation manager可以返回一个旧的缓存位置,所以这可能就是发生在您身上的情况。在对接收到的CLLocation对象执行任何操作之前

我正在使用iOS CLLocation manager的核心位置API,它有时会给我错误的位置,比如我在美国,它会给我西班牙的纬度和经度。搜索了相同的堆栈覆盖流,但无法为我的查询获得相关答案。作为使用地图和位置的新手,我有点困惑。非常感谢您的帮助。

我假设您使用的是物理设备,而不是模拟器来测试此功能,并且您没有选择在xcode中模拟位置的选项。有时候,CLLocation manager可以返回一个旧的缓存位置,所以这可能就是发生在您身上的情况。在对接收到的CLLocation对象执行任何操作之前,我建议检查其水平精度和时间戳属性

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let lastLocation = locations.last, lastLocation.horizontalAccuracy < 1000, abs(lastLocation.timestamp.timeIntervalSinceNow) < 60 else {
        // location not accurate or to old (cached previously) so do not do anything
        return
    }
    // do something
}

事实上,苹果使用wifi设备进行位置检测。所以,在冷启动gps芯片上,需要一些时间来启动和查找卫星,在这段时间内,设备根据周围路由器的mac地址使用定位。如果你或你邻居的路由器曾经在西班牙,那么这就是原因——苹果的mac地址数据库刷新速度非常慢,可能需要1-3个月的时间。这只是在模拟器上还是在物理设备上?