在iOS 8.1中未调用didUpdateUserLocation

时间:2014-10-25 01:49:36

标签: ios objective-c cllocationmanager cllocation userlocation

自从我更新到iOS SDK 8和8.1以来,出现了很多问题,包括不再调用CLLocationManager didUpdateLocations的方法。

这里的代码:  在viewDidLoad中:

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    [locationManager requestAlwaysAuthorization];
}
[locationManager startUpdatingLocation];

方法:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ NSLog(@"Call?"); }

4 个答案:

答案 0 :(得分:2)

有几点想法:

  1. 您是在模拟器上还是在设备上进行测试?您必须在实际设备上测试它。 FWIW,didUpdateLocations在我的iOS 8.1设备上正常工作。

  2. 请确保您指定了NSLocationAlwaysUsageDescription字符串,否则该应用无法显示授权消息,您将无法获得授权。

    显然,如果您不需要"始终使用",您应该requestWhenInUseAuthorization,然后您必须指定NSLocationWhenInUseUsageDescription字符串。

  3. 您检查过[CLLocationManager authorizationStatus]了吗?在我尝试授权或启动位置服务之前,我会这样做,因为如果它是kCLAuthorizationStatusDeniedkCLAuthorizationStatusRestricted,位置服务将无法工作,直到用户进入设置并且补救措施。如果您获得这些授权码中的任何一个,您可能希望向他们提供相应的消息。

  4. 您是否已实施locationManager:didFailWithError:?它报告了什么吗?

  5. 您是否已实施locationManager:didChangeAuthorizationStatus:?您是否通过成功的授权状态获得此呼叫?

答案 1 :(得分:2)

需要MapKit.framework中包含Capabilities

enter image description here

答案 2 :(得分:1)

我遇到了同样的问题,我的代码(viewdidupdate方法)错过了这个:

_mapView.delegate = self;

由于某种原因,该应用程序在没有该行的ios 7中工作,但在ios 8.1中,didUpdateUserLocation从未被调用过。

答案 3 :(得分:1)

在plist中指定两者 NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription:

enter image description here

同样在代码中,请求授权:

if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { // or requestAlwaysAuthorization
    [self.locationManager requestWhenInUseAuthorization]; // or requestAlwaysAuthorization
}
[self.locationManager startUpdatingLocation];