【问题标题】:self.locationManager.requestAlwaysAuthorization() is only available on iOS 8.0 or newer - Swiftself.locationManager.requestAlwaysAuthorization() 仅适用于 iOS 8.0 或更高版本 - Swift
【发布时间】:2016-01-27 08:06:02
【问题描述】:

我正在快速开发一个简单的 ios 应用程序,它可以获取用户的位置并显示位置。我需要将此应用程序设置为面向 ios 7.0 及更高版本,以便 iPhone 4 用户可以使用此应用程序。但是,当我设置 Deployment Target7.0 我收到构建错误消息:

/Users/toing_toing/dev/xyz/HomePageViewController.swift:35:30: 'requestAlwaysAuthorization()' 仅适用于 iOS 8.0 或更高版本

来自这一行:

self.locationManager.requestAlwaysAuthorization()

我目前需要该应用程序一直访问 GPS,但我找不到可以修复部署目标错误的替换代码。我能做什么?

【问题讨论】:

  • 在 iOS 8 之前,如果未给予同意,在 locationManager 上启动更新确实会向用户生成请求。此外,不同类型的位置权限之间没有区别。

标签: ios swift ios7.1


【解决方案1】:

只需使用self.locationManager.startUpdatingLocation()

var authorizationStatus = CLLocationManager.authorizationStatus()
if (authorizationStatus == .AuthorizedWhenInUse || authorizationStatus == .AuthorizedAlways {
  locationManager.startUpdatingLocation()
}else if self.locationManager.respondsToSelector(Selector("requestAlwaysAuthorization")) {
   self.locationManager.requestAlwaysAuthorization()
}else {
   locationManager.startUpdatingLocation()
}

【讨论】:

  • 实际上,在iOS 8+上,您不应该在授权成功之前开始更新。因此,将 locationManager.startUpdatingLocation() 包装在 else 中。
  • 我使用了if #available(iOS 8.0, *) { self.locationManager.requestAlwaysAuthorization() } else { locationManager.startUpdatingLocation() },它解决了这个问题,显然这是xcode中针对这个问题的建议修复,但我没有注意到!您的回答仍然给出错误。但是非常感谢您的帮助:)
  • 快速提示,始终使用可用性检查,而不是操作系统版本检查,如果他们将来删除该东西,您的代码仍然有效。
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多