次の簡単なコードがあります。
self.departureAnnotation = [[UserAnnotation alloc] init];
self.departureAnnotation.coordinate = self.map.centerCoordinate;
[self.map addAnnotation:self.departureAnnotation];
[self.map selectAnnotation:self.departureAnnotation animated:YES];
このコードが (明らかに) 行うべきことは、注釈をマップに追加し、すぐに選択することです。
それにもかかわらず、iOS 5.1.1 を実行しているジェイルブレイクされていない iPhone 4S のこのコードは注釈を選択していません (コールアウトは表示されません) が、これは iOS 6 シミュレーターで完全に機能します。
これを修正するために、私は次のようにしました。これは基本的に、ピンの選択を 0.2 秒遅らせます。これは好きではありません。
self.departureAnnotation = [[UserAnnotation alloc] init];
self.departureAnnotation.coordinate = self.map.centerCoordinate;
[self.map addAnnotation:self.departureAnnotation];
[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(selectPin:) userInfo:self.departureAnnotation repeats:NO];
- (void)selectPin:(NSTimer *)timer
{
[self.map selectAnnotation:timer.userInfo animated:YES];
}
なぜこうなった ?
PS: また、同じパターンに従って、[self.map viewForAnnotation: self.departureAnnotation]
ピンを選択する代わりにチェックすると、ビューはゼロになります。この 0.2 秒の遅延の後、問題ありません。