尽管添加了NSLocationWhenInUseUsageDescription,iOS 8位置服务仍无法正常工作

时间:2014-10-22 14:54:31

标签: ios ios8 mkmapview cllocationmanager

我正在使用iOS8 [8.0.2],无论我尝试什么,我都无法让CLLocationManager工作。

我在info.plist添加了以下几行。

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app use location services.</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>This app use location services.</string>

在我的实施文件中:

In ViewDidLoad : 

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager requestAlwaysAuthorization];
[locationManager startUpdatingLocation];

但是没有调用以下方法。

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

我错过了什么?

2 个答案:

答案 0 :(得分:0)

选中post

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

上述代理在iOS 6中已弃用。请改用以下代码:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

修改

在通过mapView.showUserLocation

接收授权之前,请勿将locationManager:didUpdateLocations:设置为YES

这样设置:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    self.mapView.showUserLocation = YES;
    [locationManager stopUpdatingLocation];
}

答案 1 :(得分:0)

我处于同样的境地,this answer经过长时间的挣扎后让我接受了解决方案。

您需要将locationManager作为控制器的属性。

我应该注意到Swift发生了这种情况。