我有一個使用用戶位置搜索它們的按鈕。如果他們沒有授權使用他們的地點尚未/拒絕的權限,它要求的權限請求位置時應用程序崩潰,並且用戶什麼也不做。
相關代碼:
func updateLocationStatus(){
locationEnabled = CLLocationManager.locationServicesEnabled()
appLocationEnabled = CLLocationManager.authorizationStatus()
}
@IBAction func searchNearby(sender: UIButton) {
updateLocationStatus()
if appLocationEnabled == CLAuthorizationStatus.Denied {
//Show an alert to let them know they've denied location permissions
presentViewController(alert, animated: true, completion: nil)
}
else if appLocationEnabled == CLAuthorizationStatus.NotDetermined ||
appLocationEnabled != CLAuthorizationStatus.AuthorizedWhenInUse &&
appLocationEnabled != CLAuthorizationStatus.AuthorizedAlways{
locationManager.requestWhenInUseAuthorization()
}
else{
activityIndicator.startAnimating()
locationManager.requestLocation()
}
}
正常使用時,它工作正常。但是,如果您讓「允許應用程序使用您的位置[不允許] [允許]」警報在此處停留約5秒鐘,則應用程序會崩潰。線在Xcode躍升至導致該錯誤是
locationManager.requestWhenInUseAuthorization()
和提供的錯誤是
線程1:EXC_BAD_ACCESS(代碼= 2,地址= 0xsomeaddress)
我不t甚至不知道從哪裏開始解決這個問題,因爲這個錯誤告訴我什麼都沒有,功能完美無缺,除非你什麼都不做時間太長
回溯是否提供任何有用的信息? –
是的,它確實。因爲只要授權未確定就調用此函數,因此在彈出對話框直到發生堆棧溢出時,會重複調用searchNearby函數。我認爲這些指令會按順序運行(即,在requestAuthorization上停止代碼執行直到確定了答案),但似乎並非如此。感謝您的建議,我從來不知道回溯是xcode中的一件事。請回復作爲答案,以便我可以接受它 –