iOS - viewForAnnotation返回而不执行

时间:2012-12-07 16:13:12

标签: objective-c ios mkmapview

点击UI元素时,我执行以下代码:

- (IBAction)setPoint
{
    UserAnnotationView *pinview = (UserAnnotationView*)[self.map viewForAnnotation:currentAnnotation];
    NSLog(@"droping it: %@", pinview);
    NSLog(@"stop! hammer time!");
}

我的viewForAnnotation看起来像这样:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>) annotation
{
    NSLog(@"here !!!");
    ...
    ...
}

所以,我希望控制台中的输出为:

here !!!
droping it: <some object representation>
stop! hammer time!

但相反,我有这个:

2012-12-07 18:03:58.506 MyApp[16523:707] droping it: (null)
2012-12-07 18:03:58.507 MyApp[16523:707] stop! hammer time!
2012-12-07 18:03:58.607 MyApp[16523:707] here!!!

为什么viewForAnnotation在没有执行的情况下立即返回,然后在之后正确执行?!?!

谢谢!

1 个答案:

答案 0 :(得分:0)

viewForAnnotation不是你应该称之为自己的东西。这是地图在需要刷新其绘图时询问其代理的内容。您在viewForAnnotation上调用了MKMapView,而不是实现MKMapViewDelegate协议的内容(您的viewController可能会实现该协议),因此您将null作为回复。然后其他东西触发地图重绘,并询问其代表注释,即打印出here!!!时。