2017-03-04 118 views
0

我有一個使用用戶位置搜索它們的按鈕。如果他們沒有授權使用他們的地點尚未/拒絕的權限,它要求的權限請求位置時應用程序崩潰,並且用戶什麼也不做。

相關代碼:

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甚至不知道從哪裏開始解決這個問題,因爲這個錯誤告訴我什麼都沒有,功能完美無缺,除非你什麼都不做時間太長

+0

回溯是否提供任何有用的信息? –

+0

是的,它確實。因爲只要授權未確定就調用此函數,因此在彈出對話框直到發生堆棧溢出時,會重複調用searchNearby函數。我認爲這些指令會按順序運行(即,在requestAuthorization上停止代碼執行直到確定了答案),但似乎並非如此。感謝您的建議,我從來不知道回溯是xcode中的一件事。請回復作爲答案,以便我可以接受它 –

回答

1

回溯是否提供任何有用的信息?在控制檯中,當Xcode中斷時,可以在提示符下鍵入bt。或者,您可以查看調試導航器。

1

也許這個wi將解決這個問題。確保在Info.plist中添加適當的鍵值組合。

像這樣的:

enter image description here

你也可能需要設置一個破發點,以確保絕對位置已啓用。

要開始查找位置,還應該配置位置管理器的desiredAccuracydistanceFilter屬性,然後調用requestLocation()startUpdatingLocation()

+0

我有隱私 - 位置使用說明和NSLocationWhenInUseUsageDescription字符串設置在我的Info.plist中。我從來沒有要求總是使用,所以我沒有這樣的描述 –

相關問題