Пожалуйста, посмотрите на интерфейс KMLPlacemark в KMLParser, там вы можете увидеть, что именно анализируется и хранится в элементе метки xml. Например, адрес отсутствует. Поэтому вам нужно будет добавить всю информацию, которую вы хотите, чтобы анализатор собирал, реализовав поля в классе KMLPlacemark и изменив методы KMLParser:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName ...
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName ...
, а также некоторые части реализации KMLPlacemark. Чтобы заполнить новые поля парсером, вам нужно написать такие методы, как - (void)beginName
и - (void)endName
. Будет немного сложно, если у элементов, которые вы хотите проанализировать, есть дети.
Может быть полезно разделить файл KMLParser на несколько файлов, каждый из которых содержит один класс.
Если вы достигли этого, и ваша метка содержит все необходимые данные, вы можете заметить, что нажмите на аннотацию с протоколом MKMapViewDelegate. Реализуйте didDeselectAnnotationView , который может выглядеть следующим образом:
- (void) mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
// implementation example of placemarkForAnnotation below
KMLPlacemark * placemark = [kml placemarkForAnnotation:view.annotation];
MyDetailViewController * myDetailViewController = [[MyDetailViewController alloc] initWithPlacemark:placemark];
[self presentModalViewController:myDetailViewController animated:YES];
[myDetailViewController release];
}
В KMLParser добавить
- (KMLPlacemark *)placemarkForAnnotation:(id <MKAnnotation>)point
{
// Find the KMLPlacemark object that owns this point and return it
for (KMLPlacemark *placemark in _placemarks) {
if ([placemark point] == point)
return placemark;
}
return nil;
}
Надеюсь, я мог бы указать вам правильное направление. Это будет какая-то работа;)