在 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 中获得地理定位许可?