Вариант, который я предлагаю, если вы хотите остаться с plists, состоит в том, чтобы разбить большой plist на более мелкие, которые покрывают меньшие регионы.
Если разбить их на 7 австралийских штатов, вы получите необходимый уровень производительности, тогда это нормально. Но вместо этого я создавал бы небольшие области (все прямоугольные), каждая из которых покрывала некоторое фиксированное число N градусов на стороне. N не должно быть слишком маленьким, но не слишком большим (это зависит от того, насколько далеко от текущего местоположения вы хотите показывать данные).
Например, вы могли бы разбить единый PLIST в 16 регионах, как это (он не должен быть квадратный номер):
North
A B C D
West E F G H East
I J K L
M N O P
South
Plist «А» будет содержать данные аннотаций для Lat сказать 50 до 51 и Lon 100 до 110.
Плистер «B» будет содержать данные аннотации для лат 50-51 и Lon от 110 до 120.
Плист «E» будет содержать данные аннотации для латов 49-50 и Lon 100 to 110 .
И т.д.
У меня также был бы дополнительный «индексный» plist, который позволил бы приложению определить, какой plist заданная координата, и что это за соседи этого plist. Затем приложение может прочитать данные аннотации из plist текущего местоположения и его соседей в случае, если текущее местоположение находится рядом с краем области. Структура
Индекс Plist может выглядеть так:
PlistName NWCoordinate SECoordinate Neighbors
A 51,100 50,110 B, E, F
F 50,110 49,120 A, B, C, E, G, I, J, K
Индекс PLIST будет читаться один раз в начале приложения.
Затем, когда приложение имеет текущее местоположение (или всякий раз, когда она меняется достаточно существенно), приложение будет сделать следующее:
- Удалить существующие аннотации на карте.
- Используйте указатель, чтобы выяснить, какие plist (ы) загружать новые аннотации. Предположим, что текущее местоположение - 49,25, 112,3. Используя индекс, приложение загружает F-plist и его соседи в некоторый массив (не непосредственно к карте по одному).
- Добавьте аннотации в массив одним выстрелом, используя
addAnnotations
.
Только вариант Я думаю, это разбить большой plist на более мелкие, покрывающие меньшие области. Затем, основываясь на текущем местоположении, загружайте только plist (s) в текущее местоположение или рядом с ним. Кроме того, «Xcode» - это только IDE, и вопрос не в IDE. Я обновил тег до «ios». – Anna
Поблагодарите Анну, которая звучит как способ пойти, поэтому мне нужно было бы установить утверждение if, чтобы загрузить определенный plist, основанный на регионе между определенными долготами и широтами? Скажем, у Австралии есть 7 государств, которые я должен создать семь заявлений? –