iOS App获取无效的用户位置

时间:2014-10-10 14:51:01

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

当我试图在我的地图上显示用户位置时,它显示位置在海洋中的某个位置(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];

1 个答案:

答案 0 :(得分:0)

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

[_locationManager requestWhenInUseAuthorization];
[_locationManager requestAlwaysAuthorization];

<强> requestWhenInUseAuthorization

如果您希望在应用处于活动前景模式时获取位置更新,请使用[_locationManager requestWhenInUseAuthorization];,而不是在后台使用时。

<强> requestAlwaysAuthorization

当您想要获取位置更新时使用[_locationManager requestAlwaysAuthorization];即使您的应用处于后台模式也是如此。因此OS会相应地要求权限

向info.Plist添加密钥

现在可以在您的info.Plist中添加NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription密钥,具体取决于您要求的权限。

此密钥的值应为NSString解释用户为什么该应用想要使用位置服务,例如“我们需要您的位置以获取XYZ原因”

如果iOS在Plist文件中找不到上述密钥,则会忽略位置请求。 希望这可以帮助。顺便说一句,我重新录制了WWDC 2014视频“核心位置的新变化”,所有iOS8的变化都得到了很好的解释。

代码中的其他更改

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