2

locationServicesEnabled 从属性更改为方法。

这已被弃用:

CLLocationManager *manager = [[CLLocationManager alloc] init];
if (manager.locationServicesEnabled == NO) {
     // ...
}

现在我应该使用:

if (![CLLocationManager locationServicesEnabled]) {
    // ...
}

我想支持 iOS 3 和 iOS 4 设备。如何在 iOS 3 设备上检查这一点并摆脱已弃用的警告?

4

3 回答 3

5

由于属性 'locationServicesEnabled' 刚刚被弃用,它仍然可以使用(在未确定的时间内)。要动态处理这种情况,您需要提供防御性解决方案。与上面的解决方案类似,我使用了:

BOOL locationAccessAllowed = NO ;
if( [CLLocationManager instancesRespondToSelector:@selector(locationServicesEnabled)] )
{
    // iOS 3.x and earlier
    locationAccessAllowed = locationManager.locationServicesEnabled ;
}
else if( [CLLocationManager respondsToSelector:@selector(locationServicesEnabled)] )
{
    // iOS 4.x
    locationAccessAllowed = [CLLocationManager locationServicesEnabled] ;
}

对“instancesRespondToSelector”的调用检查该属性是否仍然可用,然后我再次检查该类本身是否支持该方法调用(作为一个静态方法,它将报告“是”)。

只是另一种选择。

于 2011-03-30T14:06:28.947 回答
2

编辑:

#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_3_1
  #if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_3_2
    if (![CLLocationManager locationServicesEnabled]) {
    // ...
    }
  #else
    CLLocationManager *manager = [[CLLocationManager alloc] init];
    if (manager.locationServicesEnabled == NO) {
       // ...
    }
  #endif
#else
CLLocationManager *manager = [[CLLocationManager alloc] init];
if (manager.locationServicesEnabled == NO) {
     // ...
}
#endif
于 2010-10-04T12:35:30.350 回答
1

尝试:

BOOL locationServicesEnabled;
CLLocationManager locationManager = [CLLocationManager new];
if( [locationManager respondsToSelector:@selector(locationServicesEnabled) ] )
{
    locationServicesEnabled = [locationManager locationServicesEnabled];
}
else
{
    locationServicesEnabled = locationManager.locationServicesEnabled;
}

作为修复/解决方法。

在使用最小部署目标以允许较旧的操作系统版本访问您的应用程序时,使用编译器定义将导致您出现问题。

于 2010-10-22T00:59:46.493 回答