Второй цикл проходит через все точки (аннотации), и текущий вид аннотации заканчивается изображением для последней точки.Объект annotationView не изменяется внутри этого цикла.
Я предполагаю, что второй цикл и последняя строка находятся в методе viewForAnnotation.
Вместо того, чтобы проходить по всем точкам, вы должны получить routeDict изтолько текущий объект аннотации и установите изображение annotationView один раз.
Предполагая, что вы добавили routeDict как свойство в классе AllAnnotations, вы должны сделать что-то вроде этого:
NSDictionary *routeDict = ((AllAnnotations *)annotation).routeDict;
NSString *first = [routeDict objectForKey: POINT_KEY];
NSString *getNum = [routeDict objectForKey: COLOR_KEY];
NSString *again = [getNum stringByAppendingString:first];
NSString *imgValue = [again stringByAppendingString:@".png"];
annotationView.image = [UIImage imageNamed:imgValue];
Редактировать:
Исходя из обновленного кода в вашем вопросе и комментариях, вот изменения, которые вам нужно внести.
В AllAnnotations.h добавьте ivar для хранения файла изображенияимя для аннотации:
@interface AllAnnotations : NSObject <MKAnnotation> {
//existing ivars here
NSString *imageFileName;
}
//existing properties here
@property (copy) NSString *imageFileName;
//existing method headers here
@end
В AllAnnotations.m добавьте синтез для нового ivar и обновите методы initWithDictionary и dealloc:
@synthesize imageFileName;
- (id) initWithDictionary:(NSDictionary *) dict
{
self = [super init];
if (self != nil) {
coordinate.latitude = [[dict objectForKey:@"latitude"] doubleValue];
coordinate.longitude = [[dict objectForKey:@"longitude"] doubleValue];
self.title = [dict objectForKey:@"name"];
self.subtitle = [dict objectForKey:@"subname"];
//set this annotation's image file name...
NSString *first = [dict objectForKey: POINT_KEY];
NSString *getNum = [dict objectForKey: COLOR_KEY];
NSString *again = [getNum stringByAppendingString:first];
self.imageFileName = [again stringByAppendingString:@".png"];
}
return self;
}
- (void) dealloc
{
[title release];
[subtitle release];
[imageFileName release];
[super dealloc];
}
В качестве альтернативы, вы можете сохранить значенияобъектов POINT_KEY и COLOR_KEY в аннотации и генерируют имя файла в методе viewForAnnotation.
Кстати, «AllAnnotations» не является хорошим именем для этого класса, который представляет одну аннотацию.Возможно, «RouteAnnotation» будет лучше.
Наконец, метод viewForAnnotation должен выглядеть следующим образом:
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
MKAnnotationView * annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"annot"];
if (!annotationView) {
annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"annot"] autorelease];
annotationView.canShowCallout = YES;
}
else {
annotationView.annotation = annotation;
}
AllAnnotations *routeAnnotation = (AllAnnotations *)annotation;
annotationView.image = [UIImage imageNamed:routeAnnotation.imageFileName];
return annotationView;
}