地图区域更改时地图标注显示不正确的图像

Map callouts showing incorrect images when map area changed

大家好,我是 mapkit 的新手,我创建了一个 mapView,我在其中显示了提供人员位置以及姓名和照片的注释。在每个注释上都有一个披露按钮,可以按下该按钮以转到该人的详细信息屏幕。当我从数组中加载人员时,我将 MKAnnotation 子类化并添加了一个标识符 属性 以便在按下注释时我可以识别原始数组元素并转到正确的人员屏幕。标注上有一个人的图像,它也通过标识符来自数组。这种 segueing 效果很好,但是我看到当我四处移动地图然后回到原来的位置时,人们的照片不再与人们的名字同步。 我在想我的 viewForAnnotation 方法可能有错误,如果有人能指出我在这里遗漏的内容,我将不胜感激。 这是方法代码:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    // If it's the user location, just return nil.
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    // Handle any custom annotations.
    if ([annotation isKindOfClass:[MyAnnotation class]])
    {
        // Try to dequeue an existing pin view first.
        MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"];
        if (!pinView)
        {
            // If an existing pin view was not available, create one.
            pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"];
            pinView.canShowCallout = YES;
            pinView.image = [UIImage imageNamed:@"Tch4"];
            //pinView.calloutOffset = CGPointMake(0, 32);
            pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

            MyAnnotation *myAnn = (MyAnnotation *) annotation;
            // GET ARRAY IDENTIFIER
            identInt = [myAnn.identifier intValue];

            NSLog(@" Tag = %i", identInt);

            // Load and display photo using SDWEBImage
            UIImageView *photoImageView = [[UIImageView alloc] init];
            NSString *urlPhotoId = [jsonTeach [identInt]valueForKeyPath:@"picture.id"];
            NSString *urlPhoto = [NSString stringWithFormat:@"http://soon.nextdoorteacher.com/img/profiles/%@.jpg", urlPhotoId];

            [photoImageView sd_setImageWithURL:[NSURL URLWithString:urlPhoto] placeholderImage:[UIImage imageNamed:@"mortarboard2"]];

            photoImageView.frame = CGRectMake(0,0,50,50);
            pinView.leftCalloutAccessoryView = photoImageView;

        } else {
            pinView.annotation = annotation;
        }
        return pinView;
    }
    return nil;

}

MyAnnotation 是包含标识符的子类 属性 谢谢

更改了方法,检查视图并同时将自定义图像和数据添加到引脚注释视图。