Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CLLocation-应用程序恢复时用户位置丢失(零lat和long)_Ios_Objective C_Mkmapview_Cllocation_Showuserlocation - Fatal编程技术网

Ios CLLocation-应用程序恢复时用户位置丢失(零lat和long)

Ios CLLocation-应用程序恢复时用户位置丢失(零lat和long),ios,objective-c,mkmapview,cllocation,showuserlocation,Ios,Objective C,Mkmapview,Cllocation,Showuserlocation,当应用程序从长时间暂停模式恢复时,GPS信号丢失。 和/或用户进入GPS较弱的建筑物后,然后恢复应用程序 蓝点消失,贴图的中心位于lat:0 long:0(位于 尼日利亚附近的海洋(非洲) 如果您在该时间点启动另一个GPS应用程序,如Apple Maps, 你确实看到了蓝点,即使不是那么准确 用户修复它的唯一方法是完全关闭我的应用程序,然后重新启动它 它发生在iOS 5.x和iOS 6.x上 在讨论细节之前,我想问一下: 有人遇到过这个问题吗??? 这很烦人,但我找不到任何人对此抱怨 网络上的任

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

蓝点消失,贴图的中心位于lat:0 long:0(位于 尼日利亚附近的海洋(非洲) 如果您在该时间点启动另一个GPS应用程序,如Apple Maps, 你确实看到了蓝点,即使不是那么准确

用户修复它的唯一方法是完全关闭我的应用程序,然后重新启动它

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

在讨论细节之前,我想问一下:
有人遇到过这个问题吗???
这很烦人,但我找不到任何人对此抱怨 网络上的任何地方-非常奇怪

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

我已经尝试在应用程序恢复时重新启动所有可能的组件

showUserLocation=NO;
showUserLocation=YES;

或 即使释放locationManager并再次初始化它也无济于事
(还尝试使用dispatch_after延迟重新启动)

是否有任何编程方式强制重置ios中的GPS信号或CLLocation?

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

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

Go to 

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

当您说您已尝试停止/启动
CLLocationManager
对象时,您是说您在代理中得到的回拨给您一个0,0坐标,还是您正试图使用
CLLocationManager
中的
location
属性直接访问该位置

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

-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
我在我的应用程序中处理
CLLocationManager
的方式(现在我并不是说这对您的用例是最佳的或理想的,但它确实允许我们在应用程序启动/恢复时为用户提供可靠的基于位置的体验)

  • CLLocationManager
    包装到位置管理类中(通常使用单例)-我认为这可以是
    CLLocationManager
    的子类,但在我的例子中,它只是
    NSObject
    的子类,带有
    CLLocationManager
    对象作为属性
  • 将最后一个已知的有效位置存储在此单例中,然后将其写入磁盘(NSUserDefaults或其他位置-需要重新检查是否允许您在
    NSUserDefaults
    中存储用户位置,但我们已在应用程序中完成此操作,并且似乎不会影响审批流程)
  • 重新实现一种在自定义类中获取当前位置的方法-基本上检查
    CLLocationManager
    是否返回0,0,如果是,则返回缓存位置
  • 严格来说,这不是必需的,但是如果您有多个视图/页面需要使用位置,那么实现observer模型效果很好(因为您的singleton现在是
    CLLocationManager
    的委托,您需要有一种方法将此信息传递给视图控制器)
  • 根据以上内容,在我的地图页面(或显示用户位置的任何地方),我基本上会使用缓存位置更新地图一次(在
    viewdiload
    ),然后允许通过代理回调对地图进行一次更新。收到回拨后,我将
    showsUserLocation
    设置为
    YES
    (如果未调用回拨,则您还没有有效的位置,因此在该点设置
    showsUserLocation
    没有任何作用)


    我希望这有帮助,如果您还有任何问题,请随时告诉我

    我偶尔会看到类似的情况,但不是在暂停和恢复期间,通常是在发布之间。是的,它被设置为无,我做了更改并开始测试。将很快报告。在应用程序恢复后,它肯定提高了GPS恢复能力。唯一不好的一面是,在连接到Xcode的设备上进行测试时,它将模拟伦敦或其他地方的真实GPS坐标。感谢分享你的应用程序设计,这听起来确实是一个坚定的解决方案。当我说0,0的时候,我的意思是我从回调中得到的。从这个阶段开始,蓝点就永远消失了。如果你能在第3步中解释一下你创建/伪造用户位置的方法(使用真正的蓝点和默认注释?)。如果你想模拟默认注释,最简单的方法是使用Sam Vermette的-他是一个很棒的程序员,我用过的每一个类都非常容易实现(SVProgressHUD、SVPullToRefresh、SVInfiniteScrolling)。只需将其放在缓存位置(假设您在应用程序进入后台之前将该位置缓存到磁盘)。
    -(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation