应用程序恢复时CLLocation-用户位置丢失(零纬度和长度)

时间:2013-03-23 12:18:41

标签: ios objective-c mkmapview cllocation showuserlocation

从长时间暂停模式恢复应用程序时GPS信号丢失 和/或 用户进入GPS较弱的建筑物后然后恢复应用程序。

蓝点消失,地图以纬度为中心:0长:0(在某处 尼日利亚 - 非洲附近的海洋) 如果您在该时间点启动另一个GPS应用程序,例如Apple Maps, 你会看到蓝点,即使不那么准确。

用户可以修复它的唯一方法是完全删除我的应用并重新启动它。

它发生在iOS 5.x和iOS 6.x上。

在详细说明之前,我真的想问:
有没有人遇到这个问题?
它非常讨厌,但我找不到任何人抱怨这个 在网络上的任何地方 - 非常奇怪。

我正在使用普通的CLLocation和showUserLocation = YES,
没有什么神奇的,没有特殊的精确度调整或其他,只是简单的默认 实施

我已经尝试在恢复应用时重新启动每个可能的组件;

showUserLocation=NO;
showUserLocation=YES;

[locationManager stopUpdatingLocation];
[locationManager startUpdatingLocation];

或 甚至释放locationManager并再次初始化也无济于事! (也尝试使用dispatch_after延迟重启)

是否有任何编程方式强制重置GPS信号或在ios中的CLLocation?
将欣赏任何相关的讨论!

2 个答案:

答案 0 :(得分:1)

我认为您默认位置设置为“无”,因此会创建此类问题。

Go to 

Edite Scheme..
    |
    |
  "Run YourProjectName"  / Left Hand Side
       |
       |
  Select "Option" Tab
         |
         |
     Default Location
          |
          |
     Choose any Location such like , "London England"

答案 1 :(得分:0)

当你说你试图停止/启动CLLocationManager对象时,你是说你在委托中得到的回调给你一个0,0坐标,或者你是否试图访问直接使用location中的CLLocationManager属性的位置?

我在基于位置的应用上工作,我可以告诉你的一件事是你不能指望直接获取CLLocationManager对象的位置。获取位置信息的唯一可靠方法是通过实现

来依赖CLLocationManager类的回调
-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

我在我的应用中处理CLLocationManager的方式(现在我并不是说这对您的用例来说是最佳或理想的,但它确实允许我们在应用启动时为用户提供可靠的基于位置的体验/恢复)

  1. CLLocationManager包装到位置管理类中(通常使用单例) - 我认为这可以是CLLocationManager的子类,但在我的情况下,它只是NSObject的子类一个CLLocationManager对象作为属性
  2. 将最后一个已知有效位置存储在此单例中,然后将其写入磁盘(NSUserDefaults或其他位置 - 需要重新检查是否允许您在NSUserDefaults中存储用户位置但我们已完成它在我们的应用程序中并且似乎不影响批准过程)
  3. 重新实现一种获取自定义类中当前位置的方法 - 基本上检查CLLocationManager是否返回0,0,如果是,则返回缓存位置
  4. 不是绝对必要但如果您有多个需要使用该位置的视图/页面,实现观察者模型效果很好(因为您的单身人士现在是CLLocationManager的委托,您需要有办法通过这些信息发送给您的视图控制器。)
  5. 使用上面的内容,在我的地图页面上(或者我在哪里显示用户位置) - 我基本上用缓存的位置更新地图一次(在viewDidLoad中),然后我允许通过地图更新地图委托回调。收到回拨后,我会将showsUserLocation设置为YES(如果未调用回叫,则您还没有有效的位置,因此设置{{1}在那一点上什么都不做。)

    如果您有任何其他问题,我希望这有帮助并随时告诉我们!