#iphone #ios #core-data #geolocation #core-location
#iPhone #iOS #core-data #геолокация #ядро-местоположение
Вопрос:
Я разрабатываю приложение, которое позволяет вам искать элементы и сортировать по расстоянию от заданной точки. Подход, который я использую, заключается в том, что когда я получаю данные из удаленного API, я вычисляю расстояние от моего текущего местоположения и сохраняю его как атрибут объекта, управляемого CoreData. Это отлично работает, когда я сижу за разработкой дома, но когда я использую на устройстве, а затем перемещаю устройство в другое местоположение, атрибуты становятся неверными, поскольку расстояние теперь изменилось для всех элементов.
Подход, который я рассматриваю, заключается в том, чтобы просмотреть все хранилище основных данных и обновить атрибут расстояния, когда iPhone меняет местоположение.
Очевидная проблема в том, что я не могу делать это для каждого отдельного перемещения, поскольку мне пришлось бы просматривать все хранилище CoreData каждый раз, когда пользователь перемещается на дюйм. Это приведет к разрядке аккумулятора и замедлению работы пользователя
Некоторые решения:
- Я мог бы ограничить количество элементов, которые я храню в core data. В целом не должно быть более 100 или около того соответствующих элементов.
- Я мог бы ограничить количество раз, когда пересчет выполняется, только пересчитывая, когда местоположение пользователя изменяется на некоторое значительное расстояние.
- Я мог бы выполнить все пересчеты в фоновом режиме.
Хотя эти решения, вероятно, должны работать, я полагаю, что должно быть более элегантное решение.
Кто-нибудь решал похожую проблему с этим?
Ответ №1:
Как вы, наверное, знаете, вы можете настроить CLLocationManager с помощью distanceFilter и desiredAccuracy. Это касается пункта 2.
100 элементов вообще не будут нагружать основные данные, если только они не являются гигантскими элементами.
И вы всегда должны пытаться выполнять действия, не связанные с пользовательским интерфейсом, в фоновом режиме.
Итак, я думаю, вы с этим разобрались; в этом подходе нет ничего неэлегантного.
Попробуйте и посмотрите, какие проблемы с производительностью у вас возникают, если таковые имеются.