Cocoa touch MapKit更新注释图像

Cocoa touch MapKit更新注释图像,cocoa-touch,ios4,mapkit,mkannotation,mkannotationview,Cocoa Touch,Ios4,Mapkit,Mkannotation,Mkannotationview,在异步请求完成并提供有关批注状态的信息后,我在查找更新自定义MKAnnotationView图像的方法时遇到问题。到目前为止,我有: -(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{ 静态NSString*标识符=@“EstacionEB”; if([annotation IsKindof类:[EstacionEB类]]){ EstacionEB*位置=(EstacionEB*)注释; CustomPin*注释视图=(CustomPin*)[

在异步请求完成并提供有关批注状态的信息后,我在查找更新自定义
MKAnnotationView
图像的方法时遇到问题。到目前为止,我有:

-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{
静态NSString*标识符=@“EstacionEB”;
if([annotation IsKindof类:[EstacionEB类]]){
EstacionEB*位置=(EstacionEB*)注释;
CustomPin*注释视图=(CustomPin*)[\u mapita DequeueReusableAnnotationView with identifier:identifier];
如果(注释视图==nil){
annotationView=[[CustomPin alloc]initWithAnnotation:annotation重用标识符:标识符];
}否则{
annotationView.annotation=注释;
}
UIImage*image=[UIImage ImageName:[NSString stringWithFormat:@“%@.png”,[location elStatus]];
annotationView.enabled=是;
annotationView.canShowCallout=是;
annotationView.image=图像;
NSDictionary*temp=[[NSDictionary alloc]
initWithObjects:[NSArray arrayWithObjects:annotationView,位置,无]
forKeys:[NSArray arrayWithObjects:@“视图”,“注释”,无]
];
//该数组在控制器的viewDidLoad中合成和初始化
[self.markers setObject:temp forKey:location.eid];
返回注释视图;
}
返回零;
}
过了一会儿,我做了一个请求,结果是一个NSDictionary,我尝试执行以下操作,这两个元素都返回null:

-(void)updateStation:(NSString*)eid with details:(NSDictionary*)details
{
NSInteger free=[details objectForKey:@“free”];
NSInteger parkings=[details objectForKey:@“parkings”];
NSDictionary*storedStations=[self.markers objectForKey:eid];
CustomPin*pin=[storedStations objectForKey:@“视图”];//无
EstacionEB*station=[Referenceia objectForKey:@“annotation”];//也为零
[电台设置子标题:免费];
NSString*状态;
如果(自由==0){
状态=@“空”;

}else if((free.intValue>0)和&(parkings.intValue我不确定为什么从标记数组(尤其是注释)中获取零值。但是,我不建议像这样存储对注释视图的引用

viewForAnnotation
delegate方法可以在地图视图认为有必要的任何时候被调用,并且视图对象可以从一个调用更改为下一个调用。由于您也在使用注释视图,每个注释都使用相同的重用标识符,因此同样的视图对象也有可能被重用d用于以后的另一个注释

相反,在
updateStation
中,我建议如下:

  • 循环浏览地图视图的
    注释
    数组
  • 如果注释的类型为
    EstacionEB
    ,则检查其
    eid
    是否与正在更新的注释匹配
  • 更新批注的
    subTitle
    elStatus
    属性(更新
    elStatus
    很重要,因为
    viewForAnnotation
    委托方法使用它来设置图像)
  • 通过调用地图视图的
    viewForAnnotation:
    实例方法获取批注的当前视图(这与委托方法
    mapView:viewForAnnotation:
    不同)
  • 更新视图的
    图像
    属性

类似的例子见此。

谢谢!我将按照您的建议进行操作,稍后再报告。