2014-10-10 70 views
0

当我试图在地图上显示用户位置时,它显示位置在海洋中的某个位置(lat = 0.000,lon = 0.000),我已将模拟位置设置为伦敦仍然没有。iOS应用程序获取无效的用户位置

当我尝试在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]; 
+0

你iPhone在运行iOS 7还是8? – Undo 2014-10-10 14:52:35

+0

添加'NSLocationWhenInUseUsageDescription'键到你的info.Plist文件 – 2014-10-10 14:54:06

+0

我在我的iphone上运行7和模拟器上运行8,我已经添加了描述,任何其他想法? – 2014-10-10 23:41:35

回答

0

没有必要增加这两个他们都做不同的事情

[_locationManager requestWhenInUseAuthorization]; 
[_locationManager requestAlwaysAuthorization]; 

requestWhenInUseAuthorization

使用[_locationManager requestWhenInUseAuthorization];当你想获得位置更新时,应用程序是前景模式的活动,而不是在后台。

requestAlwaysAuthorization

使用[_locationManager requestAlwaysAuthorization];当你想获得位置更新,甚至当你的应用程序在后台模式。因此,OS会要求相应的权限

添加要点的Info.plist

现在是mandetory添加任何NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription关键是你的info.plist取决于其许可你所要求的。

这个键的值应该是为什么应用程序要使用定位服务有点像NSString解释的用户“我们需要你为XYZ原因的位置”

如果iOS不上面找到你的plist文件的关键,它会忽略位置请求。 希望这有助于。顺便说一下,我收录了你观看WWDC 2014视频“核心位置新增功能”,所有iOS8更改都已得到很好的解释。

在代码中的其他变化

另外一件事我在你的代码中看到,您正在创建的第3行_locationManager新实例,意味着你要的LocationManager分配委托后,创建新的对象,不应该这样做那个也是。

+0

先谢谢你的回答!但我已经看到更改为ios 8时需要做的更改,但我没有说我已更改为ios 8,该应用程序未在ios 7或8上显示用户位置,并且我添加了说明。所以仍然,任何想法为什么它不要求位置许可? – 2014-10-10 23:35:53

+0

可能是,您在分配委托给它之后再次创建新的locationManager对象,因此可能导致该问题。 – 2014-10-11 04:58:48

+0

在删除新的位置管理器后,它会询问我(位于设备中)是否具有位置权限,但是当我点击确定时,它什么都不做,我需要返回设置。在模拟器中它的同样的问题 – 2014-10-11 12:47:34