首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CLLocation-应用程序简历中的用户位置丢失(零lat和long)

CLLocation-应用程序简历中的用户位置丢失(零lat和long)
EN

Stack Overflow用户
提问于 2013-03-23 12:18:41
回答 2查看 727关注 0票数 2

当应用程序从长时间暂停模式恢复时,GPS信号会丢失。

和/或之后,用户进入GPS薄弱的建筑,,然后恢复应用程序。

蓝点消失了,地图的中心位置是lat:0长:0(它位于尼日利亚-非洲附近的海洋中)如果你在那个时候推出另一个GPS应用程序,比如Apple Maps,你会看到蓝点,即使不是那么精确。

用户唯一可以修复的方法是完全杀死我的应用程序,然后重新启动它。

这种情况发生在iOS 5.x和iOS 6.x上。

在详细讨论之前,我真的想问一问:

有人遇到这个问题吗??

这很烦人,但是,我在网上任何地方都找不到有人抱怨这件事--非常奇怪。

我用的是普通CLLocation和showUserLocation=YES,

没有什么神奇的,没有特别的精确调优或其他,只是简单的默认实现。

当App被恢复时,我已经尝试过重新启动每一个可能的组件;

代码语言:javascript
复制
showUserLocation=NO;
showUserLocation=YES;

代码语言:javascript
复制
[locationManager stopUpdatingLocation];
[locationManager startUpdatingLocation];

甚至发布locationManager并再次初始化它也没有帮助!

(还尝试使用dispatch_after延迟重新启动它)

是否有任何编程方法强制重置全球定位系统信号或CLLocation在ios?

如有任何相关讨论,将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-23 12:28:37

我认为默认位置设置为"None",因此创建了这种类型的问题。

代码语言:javascript
复制
Go to 

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

Stack Overflow用户

发布于 2013-03-23 18:50:46

当您说您已经尝试停止/启动CLLocationManager对象时,您是说您在委托中得到的回调提供了一个0,0坐标,还是您试图使用CLLocationManager中的location属性直接访问该位置?

我在一个基于位置的应用程序上工作,有一件事我可以告诉你,你不能计算直接得到一个CLLocationManager对象的位置。获取位置信息的唯一可靠方法是通过实现CLLocationManager类的回调

代码语言:javascript
复制
-(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的委托,您需要有一种方法将这些信息传递给您的视图控制器)。

有了上面的内容,在我的地图页面(或者在我显示用户位置的地方)上,我基本上用缓存的位置更新了一次(在viewDidLoad中),然后允许通过委托回调对地图进行一次更新。一旦收到回呼,我就将showsUserLocation设置为YES (如果没有调用回调,那么您还没有一个有效的位置,因此此时设置showsUserLocation不会做任何事情)。

我希望这会有所帮助,如果您还有任何问题,请随时通知我!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15586681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档