【问题标题】:iOS App gets invalid user locationiOS App 获取无效的用户位置
【发布时间】:2014-10-10 14:51:01
【问题描述】:

当我试图在我的地图上显示用户位置时,它显示该位置在海洋中的某处(lat = 0.000,lon = 0.000),我已将模拟位置设置为在伦敦,但仍然没有。

当我尝试在我的 iphone 上编译应用程序时,它不会请求获取用户当前位置的权限,只是当我在 iphone 设置中启用应用程序以使用位置服务时,应用程序会显示用户当前位置。

知道为什么会这样吗? 这是我的 viewDidLoad :

_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
_locationManager = [[CLLocationManager alloc] init];
if(IS_OS_8_OR_LATER) {
    [_locationManager requestWhenInUseAuthorization];
    [_locationManager requestAlwaysAuthorization];
}
_locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[_locationManager startUpdatingLocation];

【问题讨论】:

  • 您的 iPhone 运行的是 iOS 7 还是 8?
  • 将 NSLocationWhenInUseUsageDescription 密钥添加到您的 info.Plist 文件中
  • 我在 iphone 上运行 7,在模拟器上运行 8,我已经添加了描述,还有其他想法吗?
  • 也许 _locationManager 正在被释放?它是如何定义的?

标签: ios objective-c xcode location core-location


【解决方案1】:

没有必要添加它们两者都做不同的事情

[_locationManager requestWhenInUseAuthorization];
[_locationManager requestAlwaysAuthorization];

requestWhenInUseAuthorization

当您想在应用处于前台模式而不是在后台时获取位置更新时,请使用 [_locationManager requestWhenInUseAuthorization];。

requestAlwaysAuthorization

当您想要获取位置更新时使用[_locationManager requestAlwaysAuthorization];,即使您的应用程序处于后台模式。所以操作系统会相应地请求权限

向 info.Plist 添加键

现在必须将 NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription 密钥添加到您的 info.Plist 中,具体取决于您请求的权限。

此键的值应该是 NSString,向用户解释应用为什么要使用定位服务,例如“我们需要您的位置以用于 XYZ 原因”

如果 iOS 在您的 Plist 文件中没有找到上述键,它将忽略位置请求。 希望这可以帮助。顺便说一句,我建议您观看 WWDC 2014 视频“核心位置的新功能”,iOS8 的所有更改都得到了很好的解释。

代码中的其他更改

我在您的代码中还看到一件事,您正在第 3 行创建 _locationManager 的新实例,这意味着您在将委托分配给 locationManager 后正在创建新对象,也不应该这样做。

【讨论】:

  • 首先感谢您的回答!但是我已经看到更改为 ios 8 时需要进行的更改,但我没有说我已更改为 ios 8,该应用程序未在 ios 7 或 8 上显示用户位置,我确实添加了描述。仍然如此,知道为什么它不要求位置许可吗?
  • 可能是,您在为它分配委托后再次创建新的 locationManager 对象,所以这可能会导致问题。
  • 删除新的位置管理器后,它会询问我(在设备中)位置权限,但是当我点击确定时它什么也不做,我需要返回设置。在模拟器中也是同样的问题
  • 好的,您是否已将CLLocationManagerDelegate 添加到您的.h 文件中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2014-09-03
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多