首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于iOS 3和iOS 4的locationServicesEnabled

用于iOS 3和iOS 4的locationServicesEnabled
EN

Stack Overflow用户
提问于 2010-10-04 20:22:00
回答 3查看 7.7K关注 0票数 2

locationServicesEnabled已从属性更改为方法。

这已被弃用:

代码语言:javascript
复制
CLLocationManager *manager = [[CLLocationManager alloc] init];
if (manager.locationServicesEnabled == NO) {
     // ...
}

现在我应该使用:

代码语言:javascript
复制
if (![CLLocationManager locationServicesEnabled]) {
    // ...
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-22 08:59:46

尝试:

代码语言:javascript
复制
BOOL locationServicesEnabled;
CLLocationManager locationManager = [CLLocationManager new];
if( [locationManager respondsToSelector:@selector(locationServicesEnabled) ] )
{
    locationServicesEnabled = [locationManager locationServicesEnabled];
}
else
{
    locationServicesEnabled = locationManager.locationServicesEnabled;
}

作为修复/变通方法。

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

票数 1
EN

Stack Overflow用户

发布于 2011-03-30 22:06:29

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

代码语言:javascript
复制
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‘的调用检查该属性是否仍然可用,然后我再次检查类本身是否支持该方法调用(作为一个静态方法,它将报告YES)。

只是另一种选择。

票数 5
EN

Stack Overflow用户

发布于 2010-10-04 20:35:30

编辑后的

代码语言:javascript
复制
#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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3855152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档