2012-04-13 117 views
7

只要我第一次安装并启动我的应用程序,它立即要求提供位置服务,即使尚未调用startUpdatingLocation。我还没有在这一点上分配一个CLLocationManager实例。在我实际拨打电话后,我希望这个提示可以懒惰地完成,这样用户就不会盲目地关闭电话。这个流程最近是否随iOS变化?我记得它曾经被懒惰地问过。我正在使用5.1固件。懒洋洋地询问位置服务

+0

你说的对话框(应用程序***想要使用...),显示第一次用户启动你的应用程序? – 2012-04-13 07:40:17

+0

确实,它在5.1中出于某种原因这样做。 – ssteinberg 2012-04-13 10:14:24

+0

@rokjarc是的那是一个。 – 2012-04-13 17:55:24

回答

5

这很有趣。我测试了你的假设,位置管理器甚至没有被分配,但iOS位置权限对话框出现了。我尝试了以下故障排除。在每一步之后,我都会在设备上运行该项目,并且只能在最后一步显示位置弹出窗口。

  • 开始一个新的应用程序
  • 需要的info.plist
  • 需要的info.plist
  • 链接CoreLocation GPS到项目
  • 导入核心定位为标题
  • 让地理位置服务并为位置管理器合成属性
  • 请求CLLocationManager for + authorizationStatus
  • 请求CLLocationManager for + locationServicesEnabled
  • alloc init CLLocationManager实例
  • 告诉CLLocationManager开始更新位置。

只有最后一步提示提示。 为了确保我甚至创建了一个viewController,它推送了一个初始化CLLocationManager并开始更新位置的第二个视图控制器。当第二个视图控制器被按下时,权限弹出窗口才出现。这是所有在5.1上运行的最新Xcode。

我已经证明位置服务仍然只是在您尝试打开位置的时刻才会要求获得许可,就像它在以前的SDK中所做的一样。也许检查你的代码,也许在这里粘贴一些,这样我们可以进入更多的细节。 :)

+0

我会试试这个,只是为了确保。我所有的位置处理都是通过一个单例完成的,所以我只需要在整个应用程序中调用startUpdatingLocation。我有一个断点,它永远不会被调用。我能想到的唯一的另一种可能性是,无论出于何种原因,其中一个依赖框架正在引发这种情况。我的项目很大,所以重新创建项目文件将会是一件痛苦的事情。此外,自iOS 3.0以来,我一直在使用和升级项目文件。 – 2012-04-14 05:53:10

+1

您是否使用广告网络或遥测框架?前往断点侧边栏,单击底部的加号,在符号框中键入' - [CLLocationManager startUpdatingLocation]',它应该在整个项目和库中断开startUpdatingLocation。也许值得聆听'-startMonitoringSignificantLocationChanges' – jackslash 2012-04-14 13:52:07

+0

谢谢你,这是一个很好的窍门!这是因为我在启动时在后台分配(不显示)MKMapView以供以后显示。 – 2012-04-14 17:34:16

相关问题