オブザーバーを追加して問題を解決しました。次に、オブザーバーがその処理を実行し、その後、コールアウトが表示されます。
問題があったのは、バブルが表示された後、コールアウトバブルの情報を更新できなかったことです。これを行う唯一の方法は、(私が理解しているように)独自のコールアウトバブルを作成することです。これは、期限があることを考えると、私が感じなかったものです。アルファ付きのUIViewと「Gettinglocationdata...」というテキストを追加することで修正しました。場所を押すときにそのビューを表示し、オブザーバーが終了したら、ビューを再び非表示にします(もちろんアニメーションを使用して)。
私の答えが他の人に役立つことを願っています。
コード:
[pin addObserver:self
forKeyPath:@"selected"
options:NSKeyValueObservingOptionNew
context:GMAP_ANNOTATION_SELECTED];
さらにいくつかのコード:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context{
NSString *action = (NSString*)context;
MKAnnotationView *annotationView = [(MKAnnotationView*)object retain];
BikeAnnotation *bike = [[annotationView annotation] retain];
if([action isEqualToString:GMAP_ANNOTATION_SELECTED] && [[bike _stationType] intValue] != 5 && [[bike _stationType] intValue] != 6){
BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
if (annotationAppeared) {
NSLog(@"Annotation selected");
else {
NSLog(@"annotation deselected");
}
}
}
そして、これを@synthesizeの直後に置きます。
NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";