VesselWheel

[Trouble Shooting] 러닝레코드 프로퍼티 무한값일 때 충돌 본문

Xcode Study

[Trouble Shooting] 러닝레코드 프로퍼티 무한값일 때 충돌

JasonYang 2024. 3. 18. 16:33

문제점

사용자가 움직이지 않거나, 실내일 때에는 거리값이 증가하지 않고, 따라서 페이스 또한 증가하지 않아 Nil인 상태이다. 

이로 인해, 코어데이터에서 러닝기록을 호출하는 프로필뷰를 탭했을 때, 오류로 인해 기기에서는 앱이 멈추거나 자동종료 되는 문제가 발생했다. 

원인 

- runningRecord.pace 값은 NaN 상태로 값이 없다. 상기 상황에서 정지버튼을 누르면 runningRecord.pace는 NaN 상태로 코어데이터에도 저장된다. 

- runningRecord.pace 값이 NaN으로 null 상태일 때, Int값으로 형변환을 할 수 없음. 

 

해결방법

우선 xcode 무한값 유한값을 검색했다. 한글로 검색하니 상관있는 검색결과가 나오지 않는다. 

영어로 무한값 infinite, 유한값 finite를 검색하니 공식홈페이지에 관련자료가 나온다. 

https://developer.apple.com/documentation/swift/double/isfinite

 

isFinite | Apple Developer Documentation

A Boolean value indicating whether this instance is finite.

developer.apple.com

runningRecord.pace 값이 유한값인지 확인되면,

 

페이스의 분과 초는 속력 대비 시간이기 때문에 runningRecord.pace를 60(분, 초)으로 나누거나 나머지를 구해야하고, 정수로 전환해야한다. 

바로 Int값으로 형변환하기 보다,  소수점 아래의 수는 Int값으로는 담을 수 없다. 따라서 round 함수로 반올림해준다. 

 

 

마지막으로 예외처리로, 유한값이 아닐때 는, N/A로 사용자에게 텍스트로 보여준다. 

} else {
self.paceText = "N/A"

 

추가적으로 값을 확인하고자할 때 사용되는 매소드로 아래와 같이 있으니, 비슷한 상황이 발생할 수 있을 때 사용할 수 있겠다.