CLLocationManager.authorizationStatus()始终使用swift& objC应用程序CLAuthorizationStatus.NotDetermined

时间:2014-06-03 20:12:54

标签: swift ios8 cllocationmanager

我可以让我的CLLocationManager进行授权。 (在ios8下迅速) 我甚至添加了一个显式的requestAlwaysAuthorization调用(在ios7下我不需要使用objC)

func finishLaunch() {
    //ask for authorization
    let status = CLLocationManager.authorizationStatus()
    if(status == CLAuthorizationStatus.NotDetermined) {
        self.locationManager.requestAlwaysAuthorization();
    }
    else {
        self.startMonitoring()
    }
    ...
}

回调永远不会得到任何东西,但NotDermined并没有向用户显示UIAlertView。

func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    if(status == CLAuthorizationStatus.NotDetermined) {
        println("Auth status unkown still!");
    }
    self.startMonitoring()
}

我做错了吗? - 对我来说感觉像个错误,但我想要一些反馈

4 个答案:

答案 0 :(得分:38)

请注意,NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription密钥现在是强制性的,因此您应将其包含在plist中。

答案 1 :(得分:3)

您唯一需要做的就是将密钥“NSLocationWhenInUseUsageDescription”添加到您的应用程序info.plist,然后创建一个CLLocationManager requestWhenInUseAuthorization方法并在viewDidLoad中调用它。

答案 2 :(得分:1)

正如我的objC应用程序一样 - 我知道在ios7下工作得很好 - 我认为它应该是一个操作系统错误并报告它:#17128352

答案 3 :(得分:0)

我有一个有趣的案例,有一个键盘插件,它需要位置。

键盘位置使用权限始终被重置。 您可以分别请求两个位置定位。但是在 iOS设置应用中,它们都被显示为一条记录,并获得了两项的一般许可。

应用程序嵌入式键盘)都具有Info.plist个文件。 在两个NSLocationAlwaysUsageDescription文件中都指定NSLocationWhenInUseUsageDescription / Info.plist很重要。 如果您错过了应用程序NSLocationAlwaysUsageDescription中的NSLocationWhenInUseUsageDescription / Info.plist,那么当您打开应用程序时,iOS将重置为键盘获得的权限!!!