2017-01-30 24 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