iOS 4中CLLocationmanager的“locationServicesEnabled”方法被弃用了?

13

我知道在iOS 4中已经不推荐使用属性locationServicesEnabled了。相反,我应该调用locationServicesEnabled方法。

在我的应用程序委托方法中

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //Some Code Here...
    CLLocationManager *manager = [[CLLocationManager alloc] init];
    if (![manager locationServicesEnabled])
    {   //show an alert
    }
 }   
我调用了这个方法,但是Xcode向我显示一个警告 "locationServicesEnabled已被弃用"。有人知道如何解决吗?因为有了这个警告,如果我在系统设置中关闭了位置服务,警报视图就无法显示。
谢谢!
4个回答

52

根据文档:

locationServicesEnabled: 一个布尔值,指示设备上是否启用了位置服务。(只读) (在iOS4.0中已经被弃用。请改用locationServicesEnabled类方法。)

所以你应该使用[CLLocationManager locationServicesEnabled]而不是[manager locationServicesEnabled]


6
顺便说一句,如果你查看了文档,就会更快地找到这个信息。我花了大约一分钟才找到这个信息。 - EmilioPelaez
1
谢谢,这很有效。但似乎只有当所有位置服务都被禁用时,警报才会显示。我想知道是否有任何方法可以在关闭此应用程序的位置服务而不是关闭整个位置服务时显示警报? - Jing
这是否意味着如果 locationServicesEnabled 返回 false,则 GPS 处于关闭状态,如果返回 true 则 GPS 处于开启状态?这是真的吗? - DShah

12

1
+1,因为这是检查你的应用程序是否启用位置服务的正确方式。locationServicesEnabled 类仅告诉您全局开关的状态,似乎并不够用。我已经花了几个小时来试验它们。 - pnizzle
@prinzzle [CLLocationManager authorizationStatus] 在模拟器5.1中无法工作...但在模拟器6.0中可以正常工作... - Karthik

0
如果您要开发一个适用于iOS 4或更高版本的应用程序,您可以这样 /注释/ 或删除它:
- (BOOL)isLocationServicesEnabled
{
    BOOL locationServicesEnabledClassPropertyAvailable = [CLLocationManager respondsToSelector:@selector(locationServicesEnabled)];// iOS 4.x
    if (locationServicesEnabledClassPropertyAvailable) { // iOS 4.x
        return [CLLocationManager locationServicesEnabled];
    } else {
        return NO;
    }
}

0

所以你只需要删除 [(id)self.locationManager headingAvailable] 并将其替换为 [CLLocationManager locationServicesEnabled] 问题解决了...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接