2014-11-12 1 views
2

앱에 [CLLocation allowDeferredLocationUpdatesUntilTraveled: timeout]을 추가했습니다. 대부분의 경우 모든 것이 잘 작동합니다. 지연된 위치의 중간에 화면을 켤 때마다 현재 위치를 알 수 있습니다. 위치 관리자가 내 위치로 locationManager:didUpdateLocations:을 전송 한 다음 지연된 위치 배열로 위치 앱을 호출 할 수 있습니까? locationManager:didUpdateLocations에 전달 된 위치에 대한 애플의 문서는allowDeferredLocationUpdatesUntilTraveled를 사용하면 순서가 깨져서 도망 갈 수 있습니까?

이 배열은 항상 현재 위치를 나타내는 적어도 하나의 객체를 포함 말한다. 업데이트가 연기되거나 배달되기 전에 여러 위치 이 도착한 경우 배열에 추가 항목이 포함될 수 있습니다. 배열의 개체는 발생한 순서대로 으로 구성됩니다. 따라서 가장 최근 위치 인 업데이트는 배열의 끝에 있습니다.

didUpdateLocations이 호출 된 순서에 대해서는 아무 것도 보지 못했습니다. 대리자 메서드 didUpdateLocations가 올바른 순서로 호출된다는 보장이 있습니까?

감사합니다. 스티븐

답변

2

그래서 나는 developer.apple.com (https://devforums.apple.com/thread/251363?tstart=0)에 대한 답변을 발견했다. 기본적으로 그렇습니다. 장치가 깨어 나면 먼저 현재 위치에 대한 개별 위치를 보낸 다음 지연된 위치를 보냅니다. 이것은 내가 보는 행동과 일치합니다. 다음은 developer.apple.com의 응답입니다.

나는 후속 코드가 뒤로 이동하여 시간이 지나면 혼란스럽지 않도록 시간 소인을 "살균"했습니다. 나는 을이 지연 모드에서 지연 위치 일괄 처리를 수령시 타임 스탬프로 정렬하여 허용했다고 생각했지만 실제로는 충분하지 않았습니다. 은 지연 시간 인 이후에 장치가 깨어 났을 때 실제로는 현재 시간 스탬프가있는 소수의 개별 위치를 보낸 다음 저장된 GPS 수정 프로그램의 큰 배치를 보내는 것이므로 실제로 발생하는 것으로 보입니다. 따라서 사용자가 위치 을 수정하려고하면 하나의 지연 배치를 처리해야합니다. 은 이전에 수신 한 위치에 새 위치를 병합해야하며 필요한만큼 되돌립니다. 불행히도 지연 모드는 디버깅하기가 어렵습니다.

관련 문제