【问题标题】:Using CLLocationManager right after requestAlwaysAuthorization在 requestAlwaysAuthorization 之后立即使用 CLLocationManager
【发布时间】:2016-01-09 18:32:27
【问题描述】:

我有一个关于 CLLocationManager 的问题。在请求许可后,我想立即使用 locationServices。 我在 viewDidLoad: 中的代码如下所示:

if (![CLLocationManager locationServicesEnabled])
{
    [self locationServicesAreNotEnabled];
}
else
{
    CLAuthorizationStatus authStatus = [CLLocationManager authorizationStatus];
    if (authStatus == kCLAuthorizationStatusDenied || authStatus == kCLAuthorizationStatusRestricted)
    {
        NSLog(@"Location Services unavailable denied/restricted");
    }
    else if (authStatus == kCLAuthorizationStatusNotDetermined)
    {
        [_locationManager requestAlwaysAuthorization];
    }

    if (authStatus == kCLAuthorizationStatusAuthorizedAlways || authStatus == kCLAuthorizationStatusAuthorizedWhenInUse)
    {
        [self startStandardUpdates];
    }
}

`

似乎代码命中了 [_location Manager requestAlwaysAuthorization];然后,不等待用户的回答,继续下一个 if 语句。 我怎样才能等待用户的响应,然后才打电话

if (authStatus == kCLAuthorizationStatusAuthorizedAlways || authStatus == kCLAuthorizationStatusAuthorizedWhenInUse)

?我可以通过使用块来实现吗? 谢谢

【问题讨论】:

    标签: ios cllocationmanager


    【解决方案1】:

    你需要实现locationManager:didChangeAuthorizationStatus:。一旦你获得授权,它就会被调用,然后你可以立即继续使用位置管理器。

    事实上,你可以预先将一个区块(一旦获得授权就说明你想要做什么)存储为一个属性,这样当locationManager:didChangeAuthorizationStatus:被调用时,你可以查看你是否已经存储了块,如果有,就调用它。

    【讨论】:

    • 我的书中提供了实际的示例代码,也可以在这里找到:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… 代码在 Swift 中,但结构同样适用于 Objective-C。
    • 简单的答案和完美的工作,就像它应该是的那样:) 虽然我自己应该注意到委托方法。非常感谢马特!
    猜你喜欢
    • 1970-01-01
    • 2014-11-15
    • 2015-02-02
    • 2021-07-08
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2013-02-16
    相关资源
    最近更新 更多