Ios 如何保持位置服务请求警报框保持不变

Ios 如何保持位置服务请求警报框保持不变,ios,swift2,Ios,Swift2,我在UITableViewController上遇到了奇怪的问题。我正在viewDidLoad方法中请求位置服务身份验证,我可以看到alertbox出现。但是,此alertbox会持续出现几秒钟,然后消失。为什么会这样 override func viewDidLoad() { let locationManager = CLLocationManager() locationManager.requestAlwaysAuthorization() } 我在加载此UITabl

我在UITableViewController上遇到了奇怪的问题。我正在viewDidLoad方法中请求位置服务身份验证,我可以看到alertbox出现。但是,此alertbox会持续出现几秒钟,然后消失。为什么会这样

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

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

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

let locationManager = CLLocationManager()
override func viewDidLoad() {
    // ...
}
此外,我不确定在viewDidLoad中执行此操作是否是一个好主意。该视图尚不在界面中;事实上,可能还没有接口


但是你的代码还有很多其他错误。您可能已经拥有授权,或者授权可能已经被拒绝,在这种情况下,请求授权是没有意义的。一般来说,授权请求比您简单的代码要复杂得多。

这一点很好!我应该在请求之前检查授权的状态。但是这些代码属于哪里呢?就我个人而言,我喜欢在我真正需要开始使用定位服务之前检查状态。但是,如果您打算在视图控制器的视图首次出现时执行此操作,则显然可以使用ViewDidDisplay。然后我在想,也许我应该申请所有我需要的服务的许可,并让他们离开。