点击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
在没有执行的情况下立即返回,然后在之后正确执行?!?!
谢谢!
答案 0 :(得分:0)
viewForAnnotation
不是你应该称之为自己的东西。这是地图在需要刷新其绘图时询问其代理的内容。您在viewForAnnotation
上调用了MKMapView
,而不是实现MKMapViewDelegate
协议的内容(您的viewController
可能会实现该协议),因此您将null
作为回复。然后其他东西触发地图重绘,并询问其代表注释,即打印出here!!!
时。