自从我更新到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?"); }
答案 0 :(得分:2)
有几点想法:
您是在模拟器上还是在设备上进行测试?您必须在实际设备上测试它。 FWIW,didUpdateLocations
在我的iOS 8.1设备上正常工作。
请确保您指定了NSLocationAlwaysUsageDescription
字符串,否则该应用无法显示授权消息,您将无法获得授权。
显然,如果您不需要"始终使用",您应该requestWhenInUseAuthorization
,然后您必须指定NSLocationWhenInUseUsageDescription
字符串。
您检查过[CLLocationManager authorizationStatus]
了吗?在我尝试授权或启动位置服务之前,我会这样做,因为如果它是kCLAuthorizationStatusDenied
或kCLAuthorizationStatusRestricted
,位置服务将无法工作,直到用户进入设置并且补救措施。如果您获得这些授权码中的任何一个,您可能希望向他们提供相应的消息。
您是否已实施locationManager:didFailWithError:
?它报告了什么吗?
您是否已实施locationManager:didChangeAuthorizationStatus:
?您是否通过成功的授权状态获得此呼叫?
答案 1 :(得分:2)
需要MapKit.framework
中包含Capabilities
:
答案 2 :(得分:1)
我遇到了同样的问题,我的代码(viewdidupdate方法)错过了这个:
_mapView.delegate = self;
由于某种原因,该应用程序在没有该行的ios 7中工作,但在ios 8.1中,didUpdateUserLocation从未被调用过。
答案 3 :(得分:1)
在plist中指定两者 NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription:
同样在代码中,请求授权:
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { // or requestAlwaysAuthorization
[self.locationManager requestWhenInUseAuthorization]; // or requestAlwaysAuthorization
}
[self.locationManager startUpdatingLocation];