Можно ли выйти из строя didUpdateLocations при использовании allowDeferredLocationUpdatesUntilTraveled

Я добавил [CLLocation allowDeferredLocationUpdatesUntilTraveled: timeout] в свое приложение. Большую часть времени все работает нормально. Время от времени я получаю текущее местоположение, когда я включаю экран в середине отложенных местоположений. Возможно ли, чтобы диспетчер местоположения отправил моему приложению locationManager:didUpdateLocations: для текущего местоположения, а затем вызвал его с массивом отложенных местоположений? О местах, переданных locationManager:didUpdateLocations, говорится в документах Apple.

Этот массив всегда содержит по крайней мере один объект, представляющий текущее местоположение. Если обновления были отложены или если несколько местоположений прибыли до того, как они могли быть доставлены, массив может содержать дополнительные записи. Объекты в массиве организованы в том порядке, в котором они появились. Таким образом, самое последнее обновление местоположения находится в конце массива.

Я ничего не видел о порядке вызова didUpdateLocations. Есть ли гарантия того, что метод делегата didUpdateLocations вызывается в правильном порядке?

Спасибо!

Стивен


person Stephen Johnson    schedule 12.11.2014    source источник


Ответы (1)


Поэтому я нашел ответ на этот вопрос на сайте developer.apple.com (https://devforums.apple.com/thread/251363?tstart=0). В принципе, да, это может случиться. Когда устройство просыпается, оно сначала отправляет некоторые отдельные местоположения для вашего текущего местоположения, а затем отправляет отложенные местоположения. Это соответствует поведению, которое я вижу. Вот ответ от developer.apple.com.

Я «дезинфицировал» временные метки, чтобы мой последующий код не путался со временем, идущим назад. Я думал, что разрешил это в отложенном режиме, отсортировав пакет отложенных местоположений по отметке времени при получении, но на самом деле я делал недостаточно. Что на самом деле происходит, когда устройство просыпается после периода задержки, так это то, что оно сначала отправляет несколько отдельных местоположений с текущей отметкой времени, а затем отправляет большой пакет сохраненных исправлений GPS. Итак, урок заключается в том, что если вы собираетесь сортировать исправления местоположения, вам нужно обработать больше, чем один отложенный пакет. Вам действительно нужно объединить новые местоположения с вашими ранее полученными местоположениями, вернувшись настолько далеко, насколько это необходимо. жаль, что отложенный режим так сложно отлаживать.

person Stephen Johnson    schedule 13.11.2014