аннотации - NSArray - Как это сделать? - PullRequest
0 голосов
/ 06 февраля 2012

Я хотел бы добавить аннотации в MapView, используя данные, полученные Json через URL.Как это можно сделать?

NSMutableArray *annotations = [[NSMutableArray alloc]init];

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://example.com/LData.php"]];

//Data: Longitud/Latitud/Country;.....

NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(str);

[foo removeAllObjects]; 

NSArray *foo2 =[str componentsSeparatedByString: @";"];
int i=0;
for(i=0;i<[foo2 count]; i++){

    [foo insertObject:[foo2 objectAtIndex:i] atIndex:i];
        NSArray *foo3 =[foo2 componentsSeparatedByString: @"/"];

Пока все хорошо ¿Как я Лей, чтобы представить переменные [i]?

        CLLocationCoordinate2D theCoordinate[i];
        theCoordinate1.latitude[i] = [foo3 objectAtIndex:1]);//Longitud
        theCoordinate1.longitude[i] = [foo3 objectAtIndex:2]);//Latitud

        MyAnnotation* myAnnotation[i]=[[MyAnnotation alloc] init];

    myAnnotation[i].coordinate=theCoordinate[i];
    myAnnotation[i].title=@""+[foo3 objectAtIndex:3];
    myAnnotation[i].subtitle=@"in the city";

        [mapView addAnnotation:myAnnotation[i]];
        [annotations addObject:myAnnotation[i]];




}

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012
NSMutableArray *annotations = [[NSMutableArray alloc]init];

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://example.com/LData.php"]];

//Data: Longitud/Latitud/Country;.....

NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(str);

[foo removeAllObjects]; 

NSArray *foo2 =[str componentsSeparatedByString: @";"];
int i=0;
for(i=0;i<[foo2 count]; i++){

    [foo insertObject:[foo2 objectAtIndex:i] atIndex:i];
        NSArray *foo3 =[foo2 componentsSeparatedByString: @"/"];


     float realLatitude = [[foo3 objectAtIndex:1] floatValue];//Longitud
     float realLongitude = [[foo3 objectAtIndex:0] floatValue];//Latitud        

         MyAnnotation* myAnnotation = [[MyAnnotation alloc] init];

     CLLocationCoordinate2D theCoordinate;
            theCoordinate.latitude = realLatitude;
            theCoordinate.longitude =  realLongitude;


    myAnnotation.coordinate = theCoordinate;
     myAnnotation.title = [foo3 objectAtIndex:3];
      //myAnnotation.subtitle = [note objectForKey:@"stationAddressKey"];

      [_mapView setDelegate:self];
      [_mapView addAnnotation:myAnnotation];
      [myAnnotation release];  

}




-(MKAnnotationView *)_mapView:(MKMapView *)aMapView viewForAnnotation:(id<MKAnnotation>)annotation

{  
    if ([annotation isKindOfClass:[MyAnnotation class]])
    {
        static NSString *reuseId = @"customAnn";

        MKAnnotationView *customAnnotationView = [aMapView dequeueReusableAnnotationViewWithIdentifier:reuseId];

        if (customAnnotationView == nil)
        {
            customAnnotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId] autorelease];
            UIImage *pinImage = [UIImage imageNamed:@"pin-green.png"];
            [customAnnotationView setImage:pinImage];
            customAnnotationView.canShowCallout = YES;
            UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            customAnnotationView.rightCalloutAccessoryView = rightButton;
        }

       // NSString *iconFilename = @"";
       // MyAnnotation *myAnn = (MyAnnotation *)annotation;
       // if ([myAnn.stationIdKey isEqualToString:@"BP"])
            iconFilename = @"bp-logo.png";
       // else
       //     if ([myAnn.stationIdKey isEqualToString:@"Caltex"])
       //         iconFilename = @"caltex.png";
       //     else
       //         if ([myAnn.stationIdKey isEqualToString:@"Shell"])
       //             iconFilename = @"shell.png";
       // UIImageView *leftIconView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:iconFilename]] autorelease];
        customAnnotationView.leftCalloutAccessoryView = leftIconView;

        customAnnotationView.annotation = annotation;

        return customAnnotationView; 
    }

    return nil; 
}



-(void)_mapView:(MKMapView *)_mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{ if ([view.annotation isKindOfClass:[MyAnnotation class]])
{
    MyAnnotation *myAnn = (MyAnnotation *)view.annotation;
    NSLog(@"callout button tapped for station id %@", myAnn.stationIdKey);
}
else
{
    NSLog(@"callout button tapped for annotation %@", view.annotation);
} }

Правильно ли это?

0 голосов
/ 06 февраля 2012

Почему вы используете разные переменные CLLocationCoordinate2D?

theCoordinate1.latitude[i] = [foo3 objectAtIndex:1]);//Longitud
theCoordinate1.longitude[i] = [foo3 objectAtIndex:2]);//Latitud

, а затем

myAnnotation[i].coordinate=theCoordinate[i];

Я думаю, вам нужно скорректировать код, и некоторые проблемы могут быть решены сами собой.

...