如何保持定位服务请求提示框一直出现

How to keep location service request alert box stays appear

我在使用 UITableViewController 时遇到了一个奇怪的问题。我在 viewDidLoad 方法中请求位置服务授权,我可以看到出现了警报框。但是,此警告框会出现几秒钟然后消失。为什么会这样?

 override func viewDidLoad() {
   let locationManager = CLLocationManager()
   locationManager.requestAlwaysAuthorization() 
 }

我在加载此 UITableViewController 的 UIViewController 中尝试了这段代码,但遇到了不同的问题。这次,只显示推送通知服务请求警报框,完全忽略位置服务请求。我猜这是因为推送通知服务请求不是来自我而是来自 ios,并且我的位置服务请求被 ios 通知请求覆盖了。我的假设是正确的,还是对此行为有任何解释?

您的位置管理器将不复存在,因为它是一个局部变量。让它成为持久的 属性:

let locationManager = CLLocationManager()
override func viewDidLoad() {
    // ...
}

此外,我不确定在 viewDidLoad 中执行此操作是否是个好主意。视图还不在界面中;事实上,可能还没有界面。

但是您的代码还有很多其他问题。您可能已经获得了授权,或者授权可能已经被拒绝,在这种情况下,请求[=22]就没有意义了=] 它。一般来说,授权请求比您的 simple-minded 代码复杂得多。