在 iOS 8 中获取用户位置警报不会留在屏幕上

Posted

技术标签:

【中文标题】在 iOS 8 中获取用户位置警报不会留在屏幕上【英文标题】:Get User location alert does not stay on screen in iOS 8 【发布时间】:2014-11-24 11:12:32 【问题描述】:

我正在尝试在获取用户位置之前获得用户的授权。我正在使用此代码:

        self.locationManager  = [[CLLocationManager alloc] init];
        [self.locationManager setDelegate:self];
        if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) 
            // ios8+
            // Sending a message to avoid compile time error
            [self.locationManager requestAlwaysAuthorization];
        
        [self showIndicatorView];
        self.getCityService = [[GetCitiesService alloc] initServiceWithDelegate:self isLocalCall:NO];
        [self.getCityService fetchCities];

我在屏幕上看到警报,但在我允许与否之前,它从屏幕上消失并且应用程序未获得授权。

我希望我的代码在用户给予许可之前停止。

【问题讨论】:

【参考方案1】:

显然在 iOS 8 SDK 中,在开始位置更新之前,需要对 CLLocationManager 调用 requestAlwaysAuthorization(用于后台位置)或 requestWhenInUseAuthorization(仅在前台时定位)。

Info.plist 中还需要有 NSLocationAlwaysUsageDescription 或 NSLocationWhenInUseUsageDescription 键,并在提示中显示一条消息。添加这些解决了我的问题。

希望对其他人有所帮助。

编辑:有关更多信息,请查看:http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/

【讨论】:

您使用的是哪个 xCode 版本?【参考方案2】:

您的代码看起来很奇怪,因为您似乎调用了两次requestAlwaysAuthorization。一次通过self.locationManager 一次通过sendAction

您的代码应如下所示:

    self.locationManager  = [[CLLocationManager alloc] init];
    [self.locationManager setDelegate:self];
    if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) 
        // iOS8+
        // Sending a message to avoid compile time error
        [self.locationManager requestAlwaysAuthorization];
    

【讨论】:

我以前做过,但是在任何输入之前警报都会消失 好吧,您调用了两次方法,这可能会导致意外行为。

以上是关于在 iOS 8 中获取用户位置警报不会留在屏幕上的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有警报消息(iOS)的情况下在 webview 中获得地理定位许可?

使用Hbuilder开发IOS应用上架审核提示请指定用户在位置许可模式警报中使用位置的预定用途。

在 IOS 中显示警报时,键盘不会从视图中退出

在IOS中显示警报时,键盘不会从View中退出

获取当前用户屏幕以显示或不显示远程通知警报

Android 通知:如何显示粘滞/更新警报