Mostrar pin de anotación dinámica en la vista de mapa

Estoy desarrollando una aplicación que usaMKMapView. He mostrado múltiples anotaciones en él. Ahora quiero mostrar una imagen de anotación personalizada para pin. He hecho una clase personalizada para MapViewAnnotation.

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MapViewAnnotation : NSObject <MKAnnotation>

@property (nonatomic,copy) NSString *title;
@property (nonatomic,copy) NSString *subtitle;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

-(id) initWithTitle:(NSString *) title SubTitle:(NSString *)subtitle AndCoordinate:(CLLocationCoordinate2D)coordinate;

@end
#import "MapViewAnnotation.h"

@implementation MapViewAnnotation

@synthesize coordinate=_coordinate;
@synthesize title=_title;

-(id) initWithTitle:(NSString *) title SubTitle:(NSString *)subtitle AndCoordinate:(CLLocationCoordinate2D)coordinate;
{
    self =  [super init];
    _title = title;
    _coordinate = coordinate;
    _subtitle = subtitle;
    return self;
}

@end

Estoy obteniendo múltiples lat-long de api y mostrando de esta manera:

[self.map_parking addAnnotations:[self createAnnotations]];
- (NSMutableArray *)createAnnotations
{
    NSMutableArray *annotations = [[NSMutableArray alloc] init];

    for (NSDictionary *row in arrfinal) {
        NSNumber *latitude = [row objectForKey:@"latitude"];
        NSNumber *longitude = [row objectForKey:@"longitude"];
        NSString *title = [row objectForKey:@"title"];
        NSString *subtitle = [row objectForKey:@"subtitle"];
        NSString *rate = [row objectForKey:@"rate"];

        //Create coordinates from the latitude and longitude values
        CLLocationCoordinate2D coord;
        coord.latitude = latitude.doubleValue;
        coord.longitude = longitude.doubleValue;

        MapViewAnnotation *annotation = [[MapViewAnnotation alloc] initWithTitle:title SubTitle:subtitle AndCoordinate:coord];

        MKAnnotationView *av = [map_parking viewForAnnotation:annotation];
        if ([rate isEqualToString:@"0.00"])
        {
            av.image = [UIImage imageNamed:@"marker2"];
        }
        else
        {
            av.image = [UIImage imageNamed:@"marker"];
        }
        [annotations addObject:annotation];

    }
    return annotations;
}

Para mostrar anotaciones, estoy usando esta referencia de método mediante este enlace:MKMapView: en lugar de Annotation Pin, una vista personalizada

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKAnnotationView *pinView = nil;
    if(annotation != map_parking.userLocation)
    {
        static NSString *defaultPinID = @"com.invasivecode.pin";
        pinView = (MKAnnotationView *)[map_parking dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinView == nil )
            pinView = [[MKAnnotationView alloc]
                       initWithAnnotation:annotation reuseIdentifier:defaultPinID];

        pinView.canShowCallout = YES;
        //pinView.animatesDrop = YES;
        for (int i=0; i<arrrates.count; i++)
        {
            if ([[arrrates objectAtIndex:i] isEqualToString:@"0.00"])
            {
                pinView.image = [UIImage imageNamed:@"marker1"];
            }
            else if ([[arrrates objectAtIndex:i] isEqualToString:@"100.71"])
            {
                pinView.image = [UIImage imageNamed:@"marker2"];
            }
            else
            {
                pinView.image = [UIImage imageNamed:@"marker3"];
            }
        }

    }
    else {
        [map_parking.userLocation setTitle:@"I am here"];
    }

    return pinView;
}

En este metodoif-else La condición funciona bien, pero todos los pines muestran la imagen, que fue la última condición.

Respuestas a la pregunta(1)

Su respuesta a la pregunta