Trouble Shooting

위치 권한을 .authorizedAlways으로 설정했을 때의 오류

GEEEEEEEE

위치 권한 허용 여부를 묻는 창

 

 

앱을 사용하는 동안 허용을 처음에 눌렀을 때, 데이터 수신이 잘 되는 것을 확인할 수 있다

 

 

 

하지만, 다시 앱을 실행시킬 경우, 라멘 가게의 데이터 수신이 이루어지지 않는다.

 

 

 

포트폴리오 앱을 만들다가 생긴 오류 : 

 

 

위치 권한 허용 여부를 묻는 창이 떴을 때

 

 

한 번 허용을 누르면 앱을 실행할 때마다 새로운 창이 떠서 매번 한 번 허용을 누름으로써 

 

 

데이터를 불러올 수 있지만 앱을 사용하는 동안 허용을 누를 경우 그 때에만 데이터가 수신되고 

 

 

앱을 다시 실행할 경우, 데이터 수신이 되지 않는다.

 

 

 

해결법 :

 

 

 

 

위치 권한을 설정하기 위한 locationManager 안에 들어가 있는 함수인

 

 

didChangeAuthorization의 공식 문서를 보면

 

 

 

 

 

앱이 locationManager를 생성하고 승인 상태가 변경될 때 Delegate에게 승인 상태를 알린다.

 

 

이 말을 토대로 보면, 앱이 위치 권한의 승인 상태를 변경할 때에

 

 

strartUpdatingLocation() (사용자의 위치를 업데이트 하는 함수)와 setInitData() (내가 만든 데이터를 불러오는 함수)를 

 

 

실행시킨다는 것이다.

 

 

그렇다면, 앱을 항상 허용을 누르게 되면, 앱을 매번 실행시켜도 

 

 

항상 위치 권한이 허용이 되어있기 때문에, 즉, 승인 상태가 변화가 없으므로

 

 

데이터를 불러오는 함수인 setInitData()를 실행시키지 않는 것이다.

 

 

한 번 허용은 말 그대로 앱을 실행시켰을 때 그 때만 허용을 해주는 것이기 때문에 

 

 

매번 앱을 실행시킬 때마다 허용을 누르므로 승인 상태가 계속해서 변하므로 그 때마다 

 

 

데이터를 불러올 수 있게 되는 것이었다.

 

 

그렇다면, 이 문제의 해결법은

 

 

해당 VC이 나타날 때, locationManager의 위치 권한 허용 상태를 체크하여

 

 

strartUpdatingLocation()와 setInitData()를 실행시켜주면 

 

 

앱을 항상 허용을 눌러도 앱의 위치 권한 변화에 상관없이 

 

 

안정적으로 데이터를 불러올 수 있을 것이다. 

 

 

viewDidLoad() 함수에 다음과 같이 설정

 

view가 메모리에 로드되고 나서

 

 

authorizationStatus를 체크하여 위의 두 함수를 실행되게끔 하니

 

 

항상 허용을 누른 후 종료시킨 후에 다시 실행시켜도 안정적으로 데이터를 불러올 수 있었다.