2011-11-20 38 views
12

Tôi đã có một MKMapView chú thích và tôi thêm như thế này:MKAnnotation không hiển thị chú thích trên 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]; 
} 

Các MKAnnotation 's hiển thị trên bản đồ tốt, và tôi có thể chọn chúng, tuy nhiên không bong bóng chú thích xuất hiện. Tôi biết rằng họ đang được chọn đúng hình này

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

Nhưng đó chỉ cần in ra

Title:(null) 

Tôi đang sử dụng ARC, và tôi đã có các thuộc tính thiết lập trong đối tượng Nơi tôi như vậy :

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

Tôi đang làm gì sai/thiếu? Cảm ơn.

+0

Trước dòng 'addAnnotation', bạn có thể NSLog' pin.title' và xem nội dung hiển thị không? Ngoài ra, trong đối tượng Place bạn đã ghi đè phương thức 'description' bằng bất kỳ cơ hội nào và nếu có mã nào trong đó? – Anna

+0

'NSLog (@"% @ ", pin.title);' Chỉ trả về '(null)'. Tôi không hiểu tại sao. –

Trả lời

40

Chú thích không hiển thị vì titlenil.

Không cần thiết phải triển khai viewForAnnotation để hiển thị chú thích vì triển khai chế độ xem bản đồ mặc định hiển thị chú thích. (Tuy nhiên, nếu bạn làm thực hiện nó, bạn phải thiết lập canShowCallout ở chỗ phương pháp đại biểu và không phải là nơi bạn đang làm việc đó ngay bây giờ.)

Thậm chí nếu bạn thiết lập canShowCallout-YES, callout vẫn sẽ không hiển thị nếu số titlenil hoặc để trống.

Đăng nhập tmp từ điển. Khóa name bị trống hoặc không tồn tại.

+0

Cảm ơn bạn rất nhiều. Một sai lầm ngớ ngẩn như vậy. –

+0

@Anna: không có độ nghiêng tài sản cho MKPinAnnotationView. làm thế nào tôi có thể làm như vậy. –

+0

Đây cũng là vấn đề đối với tôi. – instanceof

9

Bạn cần triển khai phương thức MKMapViewDelegate mapView:viewForAnnotation:, tạo chế độ xem và trả về. Trong phương thức đó, hãy gọi [view setCanShowCallout:YES]; trên chế độ xem bạn định quay lại chú thích.

Bởi vì mapView:didSelectAnnotationView: được gọi là SAU pin đã được chọn, nó sẽ không có bất kỳ ảnh hưởng nào khi bật/tắt chú thích.

+0

Cảm ơn, tôi đã thiếu mã đó. Rất tiếc, tôi vẫn gặp sự cố. Có vẻ như 'pin.title' không được đặt đúng cách, như thể tôi cố gắng in nó ngay sau khi cài đặt nó, nó chỉ prings' (null) ' –

+0

Xin lỗi, hoàn toàn bỏ qua điều đó, bạn nên chấp nhận câu trả lời khác vì nó chuẩn xác. :) –

Các vấn đề liên quan