如何在初始化实际对象之前请求权限?

时间:2016-10-07 17:21:17

标签: ios swift

如何在不初始化正确的对象实例的情况下请求对位置,相机,蓝牙等的权限?

我想在应用程序的入职期间要求权限/授权,然后我想在之后初始化int myfun(int *a, int *b) { while(some condition) { if(condition) return *a + *b; else { some manipulation; } } return -1; } 等。

我尝试使用谷歌搜索,但未找到任何相关内容。它真的可能吗?

2 个答案:

答案 0 :(得分:2)

对于位置访问等权限,我们需要一个管理器实例来显示位置访问提示(请参阅:http://nshipster.com/core-location-in-ios-8/)。这些实例只能用于请求访问(如果您希望它们只请求访问),并且将来如果您想访问资源或数据,我们可以再次使用这些管理器实例。

例如:

CLLocation manager应该用于访问用户的位置,因此在第一个屏幕中,如果您只想询问位置权限,那么可以使用以下代码

 CLLocationManager().requestAlwaysAuthorization() //Requesting always permission

如果您想在其他屏幕中访问用户的位置,可以按以下方式访问:

  locationManager.startUpdatingLocation() // use delegate methods to handle the values.

所以这些经理只能在申请许可时初始化,然后可以在需要时重新初始化。

以下是一篇关于询问位置权限的最佳方式的文章(同样可以应用于其他类型的权限请求)https://techcrunch.com/2014/04/04/the-right-way-to-ask-users-for-ios-permissions/

答案 1 :(得分:0)

对于每个动作都采用类似的方法

 let status = PHPhotoLibrary.authorizationStatus()
switch status {
case .authorized: 

case .denied, .restricted :

//handle denied status
case .notDetermined:
    // ask for permissions
    PHPhotoLibrary.requestAuthorization() { (status) -> Void in
        switch status {
        case .authorized:

        // as above
        case .denied, .restricted: 

        // as above
        case .notDetermined: break
            // won't happen but still
        }
    }
}