Из-за соображений производительности мне нужно сделать двоичную вставку в моем списке аннотаций, но после того, как я достиг той части, где мне действительно нужно вставить аннотацию, я понял, что мой mapView не такой, как NSMutableArray, поэтому я не могу свободно добавлять аннотацию в середине списка.MKMapView как создать insertAnnotationAtIndex
while (first <= last) {
NSUInteger mid = (first + last)/2;
if ([name compare:[mapView.annotations objectAtIndex:mid]] == NSOrderedDescending) {
first = mid + 1;
} else if ([name compare:[mapView.annotations objectAtIndex:mid]] == NSOrderedAscending) {
last = mid - 1;
} else {
Annotation *destination = [[Annotation alloc] init];
[destination setTitle:name];
[destination setSubtitle:sub];
[destination setCoordinate:coords];
// method doesn't exist, but how do I create/simulate this?
[mapView insertAnnotation:destination atIndex:mid];
[destination release];
return;
}
}
Можно ли расширить mapview и создать свой собственный класс для этого? Если да, то как мне добавить добавление аннотации в индекс?
Конечно, порядок важен, потому что отсортированный список аннотаций позволяет мне выполнять двоичный поиск вместо линейного поиска. На карте, содержащей около 600 аннотаций, она уменьшает средний результат от 300 сравнений до 9. Кроме того, MKMapView использует NSArray для хранения аннотаций, как показано на странице http://developer.apple.com/library/ios/#documentation /MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html, но я не уверен, как его подклассы. – Drahcir
Свойство 'annotations' предоставляет массив, но это не обязательно, как MKMapView сохраняет данные. Помните: свойства - это просто обещание предоставить определенные аксессоры. Массивы представляют собой одномерные объекты, но MKMapView требует сортировки аннотаций в 2 измерениях, и для этого существуют более сложные структуры, чем массивы. Кроме того, нет гарантии, что MKMapView сохранит порядок аннотаций в массиве, который вы ему даете. Вы должны сохранить свой собственный отсортированный список аннотаций, а не полагаться на MKMapView, чтобы сохранить свой заказ для вас. – Caleb
Подумав об этом, я считаю, что ваше предложение сделать мой собственный отсортированный список - лучшая идея. Мне не нужно отслеживать аннотации через фактический mapview, я могу просто имитировать его, сделав копию, а затем добавив к фактическому виду карты позже. Хотя ваш ответ на самом деле является вопросом и не дает ответа, ваш комментарий был полезен, поэтому я все равно соглашусь. Возможно, вы могли бы отредактировать его, чтобы скрыть ответ? – Drahcir