升级到iOS8后位置服务错误

时间:2014-11-28 18:36:30

标签: objective-c ios8 core-location

我试图支持iOS7& 8个位置服务。当我在iOS8设备上运行时,出现此错误:

"MyApp depending on legacy on-demand authorization, which is not supported for new apps"

我的plist中有一个何时使用的条目。这是我的代码:

    if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [_locationManager requestWhenInUseAuthorization];
    } else {
        [_locationManager startUpdatingLocation];
    }


- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
  if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
    [_locationManager startUpdatingLocation];
  }
}

为什么会出现此错误?

3 个答案:

答案 0 :(得分:3)

我正在从位置服务实现一个已弃用的回调,而不是实现新的回调。没有编译器警告,但阅读此内容的开发人员应在其代码中检查位置服务代理的文档。

已弃用它是委托文档中的第一个方法。整个问题是RTFM的一个案例。

  • (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation        fromLocation:(CLLocation *)oldLocation __OSX_AVAILABLE_BUT_DEPRECATED(__ MAC_10_6,__ MAC_NA,__ IPHONE_2_0,__ IPHONE_6_0);

答案 1 :(得分:1)

你在swift中遇到这个错误的原因是你没有要求用户明确许可使用位置服务,直到iOS 8才行。 从iOS 8开始,您应该明确要求使用位置服务的权限。

iOS版> = 8

self.locationManager.requestAlwaysAuthorization()
self.locationManager.startMonitoringSignificantLocationChanges()

iOS版< 8

self.locationManager.startMonitoringSignificantLocationChanges()

答案 2 :(得分:0)

在info.plist中添加这两个键,其中包含值字符串“需要位置才能找到您所在的位置”。

NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription