不请求访问 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 中崩溃的主要内容,如果未能解决你的问题,请参考以下文章

用户先前不允许后如何再次请求麦克风访问权限?

请求的注册表访问权限不允许#2

如何验证用户是不是具有网络访问权限并在没有网络访问权限时显示弹出警报

为啥不用“import CoreLocation”就可以访问 iPhone 的位置?

第三方支付处理并在支付完成后授予用户访问权限

CoreLocation - 使用authorizedWhenInUse 授权在后台持续更新位置