0

配列から mapView に複数の注釈を表示しようとしています。注釈座標は XML ファイルから解析され、[currentCall 経度] および [currentCall 緯度] として配列に格納されます。私の質問は、配列を「呼び出す」ための構文は何ですか? (あなたがそう言うかどうかはわかりません)。アプリケーションの別の部分では、解析された XML 結果をテーブルに表示し、「JointCAD *currentCall = [[xmlParser calls] objectAtIndex:indexPath.row];」を使用します。配列を「呼び出す」。注釈を表示するにはどうすればよいですか? その小さな部分を除いて、他のすべては正常に機能します。

実装ファイルは次のとおりです。

@implementation SecondViewController
@synthesize mapView;

XMLParser *xmlParser;

-(IBAction)getlocation {

mapView.showsUserLocation = YES;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView commitAnimations];

}

-(IBAction)changeSeg:(id)sender {

if (segment.selectedSegmentIndex == 0) {
    mapView.mapType = MKMapTypeStandard;
}
if (segment.selectedSegmentIndex == 1) {
    mapView.mapType = MKMapTypeSatellite;
}
if (segment.selectedSegmentIndex == 2) {
    mapView.mapType = MKMapTypeHybrid;
}
}

 -(void)viewDidLoad {

JointCAD *currentCall = [[xmlParser calls] objectAtIndex:indexPath.row];

mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
[self.view insertSubview:mapView atIndex:0];

[super viewDidLoad];
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
[mapView setDelegate:self];

MKCoordinateRegion WCCCA = { {0.0, 0.0} , {0.0, 0.0} };
WCCCA.center.latitude = 45.53540820864449;
WCCCA.center.longitude = -122.86178648471832;
WCCCA.span.longitudeDelta = 0.02f;
WCCCA.span.latitudeDelta = 0.02f;
[mapView setRegion:WCCCA animated:YES];

Annotation *ann1 = [[Annotation alloc] init];
ann1.title = @"WCCCA";
ann1.subtitle = @"Washington County Consolidated Communications Agency";
ann1.coordinate = WCCCA.center;
[mapView addAnnotation: ann1];

MKCoordinateRegion CALL = { {0.0, 0.0} , {0.0, 0.0} };
CALL.center.latitude = [currentCall.latitude doubleValue];
CALL.center.longitude = [currentCall.longitude doubleValue];
CALL.span.longitudeDelta = 0.02f;
CALL.span.latitudeDelta = 0.02f;
[mapView setRegion:WCCCA animated:YES];

Annotation *ann2 = [[Annotation alloc] init];
ann2.title = [currentCall currentCallType];
ann2.subtitle = [currentCall location];
ann2.coordinate = CALL.center;
[mapView addAnnotation: ann1];

}

-(MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
MKPinAnnotationView *MyPin=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"current"];
MyPin.pinColor = MKPinAnnotationColorRed;

UIButton *advertButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[advertButton addTarget:self action:@selector(button:) forControlEvents:UIControlEventTouchUpInside];

MyPin.rightCalloutAccessoryView = advertButton;
MyPin.draggable = NO;
MyPin.highlighted = YES;
MyPin.animatesDrop=TRUE;
MyPin.canShowCallout = YES;

return MyPin;
}

 @end
4

1 に答える 1

0

私があなたのコードを正しく理解していれば、解析された XML を反復処理して (xmlParser オブジェクトからの出力は NSArray であるように見えます)、ループ内で mapView に注釈を追加することができるはずです。

C 関数CLLocationCoordinate2DMake()を使用して、注釈の座標データ構造を作成できます。

NSArray *callsArray = [xmlParser calls];

for (JointCAD *call in callsArray) {
    Annotation *ann = [[Annotation alloc] init];
    ann.title = [call currentCallType];
    ann.subtitle = [call location];
    ann.coordinate = CLLocationCoordinate2DMake([call latitude], [call longitude]);
    [mapView addAnnotation:ann];
}
于 2012-08-28T03:00:38.133 に答える