2011-11-20 9 views
12

上の吹き出しが表示されない:MKAnnotationは、私が<code>MKMapView</code>を持っていると私はこのような注釈を追加しているMKMapView

for (NSDictionary *tmp in response) 
{ 
    NSDictionary *places = [tmp objectForKey:@"place"]; 
    NSDictionary *location = [places objectForKey:@"location"]; 
    NSLog(@"long: %@ Lat:%@",[location objectForKey:@"longitude"], [location objectForKey:@"latitude"]); 

    float longitude = [[location objectForKey:@"longitude"] floatValue]; 
    float latitude = [[location objectForKey:@"latitude"] floatValue]; 


    CLLocationCoordinate2D locationco = {latitude,longitude}; 
    NSString *titleString = [tmp objectForKey:@"name"]; 

    Place *pin = [[Place alloc] init]; 
    pin.coordinate = locationco; 
    pin.title = titleString; 
    pin.subtitle = @"A Location"; 

    //NSArray *annots = [[NSArray alloc] initWithObjects:pin, nil]; 
    //[map addAnnotations:annots]; 
    [map addAnnotation:pin]; 
    [[map viewForAnnotation:pin] setCanShowCallout:YES]; 
} 

なししかし、MKAnnotation年代は、マップの罰金に表示され、私はそれらを選択することができますコールアウトバブルが表示されます。私は、彼らがこの

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    [view setCanShowCallout:YES]; 
    NSLog(@"Title:%@",[view.annotation description]); 
} 

を形成し、適切に選択されていることを知っているしかし、それはちょうど私がARCを使用してい

Title:(null) 

を出力し、そして私のような私の場所のオブジェクトに設定するプロパティを持っています:

@property (nonatomic) CLLocationCoordinate2D coordinate; 
@property (nonatomic,readwrite, copy) NSString *title; 
@property (nonatomic,readwrite, copy) NSString *subtitle; 

私は間違っている/紛失していますか?おかげさまで

+0

'addAnnotation'行の前に、' pin.title'をNSLogできますか?また、Placeオブジェクトでは、 'description'メソッドをオーバーライドしましたか?もしあれば、そこにはどのようなコードがありますか? – Anna

+0

'NSLog(@"%@ "、pin.title);' '(null)'を返します。私はなぜか分からない。 –

答えて

40

titlenilであるため、吹き出しが表示されません。

デフォルトのマップビュー実装でコールアウトが表示されるので、コールアウトを表示するためにviewForAnnotationを実装する必要はありません。あなたはYEScanShowCalloutを設定しても(ただし、あなたがはあなたが今それをやっているというデリゲートメソッドとないでcanShowCalloutを設定する必要があり、それを実装しない場合。)

を、コールアウトはまだ場合は表示されませんtitlenilまたは空白です。

tmp辞書を記録します。 nameキーがブランクか存在しません。

+0

ありがとうございます。そんなばかげたミス。 –

+0

@Anna:MKPinAnnotationViewのプロパティティライルはありません。どうすれば同じことができますか? –

+0

これは私にとっても問題でした。 – instanceof

9

ビューを作成して返すMKMapViewDelegateメソッドmapView:viewForAnnotation:を実装する必要があります。このメソッドでは、アノテーションのために返す予定のビューの[view setCanShowCallout:YES];を呼び出します。

mapView:didSelectAnnotationView:は、ピンが選択された後に呼び出されるため、コールアウトの有効化/無効化に影響しません。

+0

ありがとう、私はそのコードがありませんでした。残念ながら私はまだ問題を抱えています。 'pin.title'が正しく設定されていないように見えます。設定した直後に印刷しようとしたように、'(null) 'をプリフェイスします。 –

+0

残念ですが、それを完全に見落とすと、絶対に正しい。 :) –

関連する問題