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ているので、応答として取得します。次に、他の何かがマップの再描画をトリガーし、デリゲートに注釈を要求します。MKMapViewMKMapViewDelegateviewControllernullhere!!!

于 2012-12-08T04:18:39.940 に答える