CLLocationManager requestWhenInUseAuthorization() 不能在 ios7 上使用 swift 2.0
Posted
技术标签:
【中文标题】CLLocationManager requestWhenInUseAuthorization() 不能在 ios7 上使用 swift 2.0【英文标题】:CLLocationManager requestWhenInUseAuthorization() not working on ios7 using swift 2.0 【发布时间】:2016-03-16 10:00:59 【问题描述】:我正在使用 swift 2.0 和一个部署目标为 7.0 的项目。当我使用
location.requestAlwaysAuthorization()
错误被抛出。而且我知道这种特殊方法不适用于 ios 7。我的问题是 .. 如果我添加
@available(ios 8.0 , *)
它是否可以在具有 ios 7.0 的设备上工作,或者只有当设备 >= ios 8.0 时才会处理此特定功能?请帮忙。
【问题讨论】:
***.com/questions/24167791/… ? @Larme,我已经完成了那个答案,但无法理解清楚。那你能说清楚一点吗? 【参考方案1】:仅当设备 >= iOS 8.0 时才会处理特定功能。
if #available(iOS 8, *)
location.requestAlwaysAuthorization()
else
locationManager.startUpdatingLocation()
对于在 iOS 8+ 上运行的设备,使用此方法将调用 requestAlwaysAuthorization()
,否则将调用 startUpdatingLocation()
。
【讨论】:
我也在检查这个@ebby94 if (location.respondsToSelector(Selector(location.requestWhenInUseAuthorization()))) 。我该如何检查? 您不能在运行 iOS 7 及更低版本的设备中使用requestWhenInUseAuthorization()
。即使您使用respondsToSelector
方法,如果您的部署目标低于iOS 8,Xcode 也会抛出错误,并要求您使用if #available(iOS 8, *)
修复它。【参考方案2】:
在 iOS7 上,CLLocationManager
在调用startUpdatingLocation
时向用户请求位置授权。通常,在 iOS7 兼容的应用程序上,您最终会编写
if #available(iOS 8.0, *)
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
这样,位置授权由requestAlwaysAuthorization
或startUpdatingLocation
请求,具体取决于操作系统。
【讨论】:
我也在检查这个@tomahh if (location.respondsToSelector(Selector(location.requestWhenInUseAuthorization()))) 。我该如何检查? 从 Swift 2 开始,检查 API 可用性的推荐方法是通过 #available() 语句。有关详细信息,请参阅this apple blog post(在可用性标题下)。以上是关于CLLocationManager requestWhenInUseAuthorization() 不能在 ios7 上使用 swift 2.0的主要内容,如果未能解决你的问题,请参考以下文章
为啥'CLLocationManager.locationServicesEnabled()'默认为真?
Xcode 6 GM - CLLocationManager
CLLocationManager 和 CLGeoCoder
CLLocationManager:没有调用 didChangeAuthorization 和 didRangeBeacons