不请求访问 coreLocation 的权限并在 swift 中崩溃
Posted
技术标签:
【中文标题】不请求访问 coreLocation 的权限并在 swift 中崩溃【英文标题】:Not ask permission to access to coreLocation and crash in swift 【发布时间】:2014-08-06 19:11:49 【问题描述】:我的 Swift 应用中有 CoreLocation。当我在模拟器或设备中运行此程序时,此崩溃并且不显示访问 CoreLocation 的权限。我拥有实现此操作所需的所有代码:代码中的请求、NSLocationWhenInUseUsageDescription 或 plist 中的 NSLocationAlwaysUsageDescription... 我正在阅读ios app doesn't ask for location permission,但我无法制作这个节目。
var location: CLLocationManager!
let status = CLLocationManager.authorizationStatus()
location=CLLocationManager()
if(status == CLAuthorizationStatus.NotDetermined)
self.location.requestAlwaysAuthorization();
else
location.startUpdatingLocation()
location.delegate = self
location.desiredAccuracy=kCLLocationAccuracyBest
self.location.startMonitoringSignificantLocationChanges()
print(location.location.coordinate.latitude) //Here crash
print(location.location.coordinate.longitude)
我还能做些什么来展示这个?
谢谢!
【问题讨论】:
【参考方案1】:这是我的应用程序中的代码 sn-p:
let locationManager = CLLocationManager()
...
locationManager.delegate = self
locationManager.activityType = CLActivityType.Fitness
locationManager.distanceFilter = 10 // 10m
if ( UIDevice.currentDevice().systemVersion == "8.0" )
locationManager.requestAlwaysAuthorization()
// get current location
if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Authorized
locationManager.startUpdatingLocation()
【讨论】:
【参考方案2】:该提示仅在状态为 .NotDetermined 时显示。当提示未显示时,还有其他状态会阻止位置服务工作(除了 .Authorized 之外的所有状态)。你应该检查这些。
另外,requestAlwaysAuthorization 不会立即返回,您需要实现
func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus)
【讨论】:
【参考方案3】:您必须在info.plist
文件中添加一行
NSLocationWhenInUseUsageDescription
包含一个字符串。
当弹出警报询问用户许可时,将显示该字符串。
【讨论】:
以上是关于不请求访问 coreLocation 的权限并在 swift 中崩溃的主要内容,如果未能解决你的问题,请参考以下文章
如何验证用户是不是具有网络访问权限并在没有网络访问权限时显示弹出警报