当我试图在我的地图上显示用户位置时,它显示位置在海洋中的某个位置(lat = 0.000,lon = 0.000),我已将模拟位置设置为伦敦,但仍然没有。< / p>
当我尝试在我的iphone上编译应用程序时,它不会要求获得用户当前位置的权限,就在我启用应用程序以在iphone设置中使用位置服务时,应用程序会显示用户当前位置。< / p>
任何想法为什么会这样做? 这是我的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 :(得分:0)
没有必要同时添加两者都做不同的事情
[_locationManager requestWhenInUseAuthorization];
[_locationManager requestAlwaysAuthorization];
<强> requestWhenInUseAuthorization 强>
如果您希望在应用处于活动前景模式时获取位置更新,请使用[_locationManager requestWhenInUseAuthorization];
,而不是在后台使用时。
<强> requestAlwaysAuthorization 强>
当您想要获取位置更新时使用[_locationManager requestAlwaysAuthorization];
即使您的应用处于后台模式也是如此。因此OS会相应地要求权限
向info.Plist添加密钥
现在可以在您的info.Plist中添加NSLocationWhenInUseUsageDescription
或NSLocationAlwaysUsageDescription
密钥,具体取决于您要求的权限。
此密钥的值应为NSString
解释用户为什么该应用想要使用位置服务,例如“我们需要您的位置以获取XYZ原因”
如果iOS在Plist文件中找不到上述密钥,则会忽略位置请求。 希望这可以帮助。顺便说一句,我重新录制了WWDC 2014视频“核心位置的新变化”,所有iOS8的变化都得到了很好的解释。
代码中的其他更改
我在你的代码中还看到了另一件事,你在第3行创建_locationManager
的新实例,意味着在将委托分配给locationManager之后创建新对象,也不应该这样做。