Сортировка геопространственных элементов с помощью coredata на iOS.Самый быстрый способ обновить все атрибуты «расстояния» - PullRequest
6 голосов
/ 12 мая 2011

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

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

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

Некоторые решения:

  1. Я мог бы ограничить количество элементов, которые я храню в основных данных.В целом не должно быть более 100 или около того соответствующих элементов.
  2. Я мог бы ограничить количество раз, когда пересчет происходит, только пересчитывая, когда местоположение пользователя изменяется на какое-то значительное расстояние.
  3. Я мог бы сделать все пересчеты в фоновом режиме.

Хотя эти решения, вероятно, должны работать, я думаю, что должно быть более элегантное решение.

Кто-нибудь решил подобную проблему с этим?

1 Ответ

5 голосов
/ 13 мая 2011

Как вы, вероятно, знаете, вы можете настроить CLLocationManager с помощью distanceFilter и требуемой точности. Это относится к пункту 2.

100 предметов не будут подвергать нагрузке основные данные, если только они не являются гигантскими.

И вы всегда должны пытаться делать что-то не в пользовательском интерфейсе в фоновом режиме.

Итак, я думаю, что вы покрыли это; в этом подходе нет ничего неуместного.

Попробуйте и посмотрите, какие проблемы с производительностью возникают, если есть.

...