【问题标题】:CLLocationManager enabled but checked NeverCLLocationManager 已启用但选中从不
【发布时间】:2015-07-17 18:51:23
【问题描述】:

我正在尝试在 AppDelegate 中确定用户是否将应用程序的位置权限设置为“从不”。如果没有获取位置,我的应用程序总是崩溃。

我在 AppDelegate 中的代码是:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    //location
    var manager = CLLocationManager()       
    if CLLocationManager.authorizationStatus() == .Restricted
            || .authorizationStatus() == .Denied {
        manager.requestWhenInUseAuthorization()
        manager.requestAlwaysAuthorization()
    }
}

谁能帮我解决这个问题?

【问题讨论】:

  • 有什么错误?
  • 它只是因为 nil 而崩溃
  • 这是 Xcode 6 还是 7?
  • 一旦我修复了明显的编译错误,您发布的代码就不会崩溃。这也没有多大意义。如果 authorizationStatus 为 Restricted,则用户无法授予访问权限,如果状态为 Denied,则用户已拒绝状态。在任何一种情况下请求授权都是没有用的。
  • @Anton,无论是您在项目的 rootviewcontroller 中使用的 CLLocationManager。

标签: swift authorization cllocationmanager appdelegate cllocation


【解决方案1】:

关于 CoreLocation 和请求授权的最佳文章在这里:http://nshipster.com/core-location-in-ios-8/

几点:

  1. 仅当当前状态为 .NotDetermined 时才请求授权
  2. 如果当前状态是 .Denied,那么您可以发布警报询问 用户进入设置并打开位置服务,但调用任何一个请求方法都不会执行任何操作。
  3. 记得在你的 plist 中加入一个 NSLocationUsageDescription ! (一世 经常忘记这一点。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多