0

当点击 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立即返回而不执行,然后正确执行?!?!

谢谢!

4

1 回答 1

0

viewForAnnotation不是你应该称呼自己的东西。这是地图在需要刷新其绘图时向其代表提出的要求。您正在调用viewForAnnotation您的MKMapView,而不是实现MKMapViewDelegate协议的东西(您viewController可能实现了该协议),因此您得到null了响应。然后其他东西会触发地图重绘,并要求其代表提供注释,这是它打印出来的时候here!!!

于 2012-12-08T04:18:39.940 回答