I have a map to which I add several annotations, like so:
for (Users *user in mapUsers){
double userlat = [user.llat doubleValue];
double us
The dequeueReusableAnnotationViewWithIdentifier
may return an annotation view that was used for an annotation different from the current annotation
parameter.
If the dequeueReusableAnnotationViewWithIdentifier
is succesful (ie. you're using a previously-used annotation view), you must update its annotation
property to be sure the view matches the current annotation
's properties.
So try changing this part:
MKAnnotationView *annView = (MKAnnotationView *)[self.mainMapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (!annView) {
annView = [[MKAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:identifier];
}
MapAnnotationViewController *sac = (MapAnnotationViewController *)annView.annotation;
to:
MKAnnotationView *annView = (MKAnnotationView *)[self.mainMapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (!annView) {
annView = [[MKAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:identifier];
}
else {
annView.annotation = annotation; // <-- add this
}
MapAnnotationViewController *sac = (MapAnnotationViewController *)annView.annotation;
Another potential issue (not causing the problem in the question) is that the view's image
property is only set if relationshipParam
is one of three values.
If somehow relationshipParam
is not one of those three coded values and the view was dequeued, the image will be based on some other annotation's relationshipParam
.
So you should add an else
part to the section that sets image
and set it to some default image just in case:
...
else if ([sac.relationshipParam isEqualToString:@"paramC"])
{
annView.image = [UIImage imageNamed:@"image3.png"];
}
else
{
annView.image = [UIImage imageNamed:@"UnknownRelationship.png"];
}