解决 iOS CLLocationManager 定位返回旧数据的问题

算法dugege • 于 2015-10-08 11:25:38 +0800 • 最后由 dugege2015-10-26 08:05:14 +0800 5029 阅读

方法很简单,只要判断下位置信息时间戳就行,

``` - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSTimeInterval locationAge = -[newLocation.timestamptimeIntervalSinceNow]; if (locationAge > 30.0){ // 接受30秒内的定位 //缓存数据不要 return; } if (newLocation.horizontalAccuracy <0) return;

你的代码

} ```

回复: 4
  • hugrup 2015-10-08 20:00:37 +0800

    为什么会返回旧数据?是bug?

  • dugege 2015-10-09 20:34:55 +0800

    @hugrup 据说是缓存

  • adow 2015-10-26 07:38:53 +0800

    一般我都是判断 horizontalAccuracy, 我想不起来是从哪里看来的了

    if newLocation.horizontalAccuracy < 0 { return }

  • dugege 2015-10-26 08:05:14 +0800

    @adow 以前项目里遇到过返回时间是旧的情况,stackoverflow后所以加了个 NSTimeInterval locationAge = -[newLocation.timestamptimeIntervalSinceNow]; if (locationAge > 30.0){ // 接受30秒内的定位 //缓存数据不要 return; }

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,见 Emoji cheat sheet
  • @name 会链接到用户页面,并会通知他
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
Ctrl+Enter