2017-01-30 22 views
0

我遇到了奇怪的UITableViewController问题。我正在请求viewDidLoad方法内的位置服务authroization,并且我可以看到alertbox出现。但是,此警报箱会保持几秒钟显示然后消失。这是为什么发生?如何保持位置服务请求警报框保持出现

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

我试过在UIViewController里加载这个UITableViewController并遇到不同的问题。这次只显示推送通知服务请求警报箱,并且位置服务请求被完全忽略。我猜是因为推送通知服务请求不是来自我,而是来自ios,并且我的位置服务请求被ios通知请求覆盖。这是我的假设是否正确或者是否存在对此行为的探索?

回答

1

您的位置管理器由于是局部变量而不存在。使它成为一个持久化属性:

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

而且我不知道它是否是一个好主意,在viewDidLoad做到这一点。视图尚未处于界面中;其实可能有没有界面呢。

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

+0

好点!在请求前我应该检查授权状态。但是代码属于哪里? – user30646

+0

个人而言,我喜欢在实际需要开始使用位置服务之前检查状态。但是如果你在视图控制器的视图第一次出现的时候这样做,你显然可以使用'viewDidAppear'。 – matt

+0

在使用服务之前,我正在询问权限。然后我想,也许我应该要求所有我需要的服务的权限,并将它们排除在外。 – user30646