locationManager didUpdateLocations fires twice on device, only once on simulator(LocationManager didUpdateLocations在设备上触发两次,在模拟器上仅触发一次)
本文介绍了LocationManager didUpdateLocations在设备上触发两次,在模拟器上仅触发一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
相同的代码,我假设设备实际上出于某种原因更新了两次位置,尽管我只调用了startUpdatingLocation()一次,并且在didUpdateLocations中运行了一些stopUpdatingLocations()
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
manager.stopUpdatingLocation()
let loc: CLLocation = locations[locations.count - 1]
let id = 0
let type = 0
let number = 0
createNewDataPoint(id, loc: loc, type: type, number: number)
}
在本例中,createNewDataPoint被调用两次,创建两个新的数据点。它只在模拟器中发生一次,所以我认为它与实际设备和GPS有关,因为模拟器伪造了它的位置。
startUpdatingLocation()在我的代码中只出现过一次,在按钮上。基本上,你只需点击按钮,进入管理器。startUpdatingLocations(),didUpdatingLocations在模拟器上点击一次,在设备上点击两次(相同的坐标),它就会创建两个新的数据点。
提到任何相关内容的唯一其他代码是设置准确性、过滤器、授权请求和前面提到的startUpdatingLocation()。我可以做些什么来确保我创建的数据点不会是所需的两倍?推荐答案
可以非常频繁地随时调用位置管理器委托方法。
不过,您可以应用以下算法来保护自己:
- 创建全局
bool
说didFindLocation
。 - 调用
startUpdatingLocation
时将didFindLocation
设置为false
。 - 内部委托回调
didUpdateLocations:
,如果didFindLocation
为false
,则将didFindLocation
设置为true
,然后调用stopUpdatingLocation
。
希望这能有所帮助。
这篇关于LocationManager didUpdateLocations在设备上触发两次,在模拟器上仅触发一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:LocationManager didUpdateLocations在设备上触发两次,在模拟器上仅触发一次


基础教程推荐
猜你喜欢
- NSString intValue 不能用于检索电话号码 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01