Как сохранить координаты местоположения в sqlite или CoreData со значительным мониторингом местоположения в swift

Я хотел бы сохранить координаты в функции делегата didUpdateLocation менеджера местоположения. Приложение может находиться в приостановленном или фоновом состоянии, поэтому нельзя полагаться на массив. Я надеюсь сохранить его с помощью FMDB или CoreData, но мне нужно знать, могу ли я сохранить записанное местоположение в обычном режиме или мне нужно использовать обработчик истечения срока действия в фоновом режиме. Если это позже, пожалуйста, поделитесь надежным способом сделать это быстро.

Я использую значительный мониторинг местоположения, который работает нормально.


person Rahul Serodia    schedule 09.12.2016    source источник
comment
Что такое фоновый обработчик срока действия?   -  person Mundi    schedule 10.12.2016
comment
Я имел в виду beginBackgroundTaskWithExpirationHandler. Этот обработчик вызывается незадолго до того, как оставшееся фоновое время приложения достигает 0. Его следует использовать для очистки и обеспечения того, чтобы у нас было достаточно времени для завершения какого-либо длительного процесса, такого как передача важного файла на удаленный сервер или, по крайней мере, попытка выполнить передачу. и отметьте все ошибки.   -  person Rahul Serodia    schedule 12.12.2016
comment
Я хотел знать, будет ли сохранение данных в FMDB работать нормально без него, и будет ли у приложения достаточно времени для сохранения данных в sqlite, если оно выйдет из состояния приостановки. Спасибо   -  person Rahul Serodia    schedule 12.12.2016


Ответы (2)


Есть много времени. По крайней мере, я сделал это в своем приложении без необходимости использовать beginBackgroundTaskWithExpirationHandler

Тем не менее рассмотрите возможность использования allowDeferredLocationUpdatesUntilTraveled для снижения энергопотребления в фоновом режиме.

person mgmart    schedule 13.12.2016

Мне показалось, что проще и безопаснее разделить функцию. Когда я получаю вызов делегата didUpdateLocations locationManager, я быстро добавляю точки местоположения к массиву ожидающих местоположений и выхожу. Затем я использую управляемую таймером функцию processPendingPoints, чтобы периодически добавлять новые точки в массив ожидающих местоположений на мою карту и очищать массив, где таймер и функция обработки будут работать только тогда, когда приложение находится на переднем плане (что хорошо для моего целей).

Как правило, я использую 10-секундную задержку для процессора ожидающих местоположений, но замедляю этот и другие процессы, когда батарея разряжена. Поскольку мне не нужно быть быстрым в этом методе, я могу центрировать или изменять размер карты и делать другие полезные вещи, а также добавлять точки.

person Ron Diel    schedule 13.12.2016