Ale*_*y V 4 iphone objective-c mkmapview ios
我的iphone应用程序没什么问题.我有这样的类和接口:
CinemaMapAnnotation.h
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface CinemaMapAnnotation : NSObject <MKAnnotation>{
    CLLocationCoordinate2D coordinate;
    NSString *title;
    NSString *subtitle;
}
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* subtitle;
-(id)initWithCoordinate:(CLLocationCoordinate2D) c;
@end
CinemaMapAnnotation.m
#import "CinemaMapAnnotation.h"
@implementation CinemaMapAnnotation
@synthesize title, subtitle, coordinate;
-(id)initWithCoordinate:(CLLocationCoordinate2D) c{
    self = [super init];
    if (self) {
        coordinate = c;
    }
    return self;
}
-(void) dealloc {
    self.title = nil;
    self.subtitle = nil;
    [super dealloc];
}
@end
CinemasMapController.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import "Cinema.h"
#import "CinemaMapAnnotation.h"
#import "PopcornuaAppDelegate.h"
@interface CinemasMapController : UIViewController <MKMapViewDelegate, MKReverseGeocoderDelegate> {
    MKMapView *mapView;
    MKReverseGeocoder *reverseGeokoder;
}
@property (nonatomic, retain) IBOutlet MKMapView *mapView;
@property (nonatomic, retain) IBOutlet MKReverseGeocoder *reverseGeokoder;
@end
CinemasMapController.m
#import "CinemasMapController.h"
@implementation CinemasMapController
@synthesize mapView, reverseGeokoder;
...
#pragma mark - Map Anotation
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id)annotation
{
    static NSString* MyIdentifier = @"CinemaMapAnotation";
    MKPinAnnotationView* pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:MyIdentifier];
    if (!pinView)
    {
        MKPinAnnotationView* pinView = [[[MKPinAnnotationView alloc]
                                               initWithAnnotation:annotation reuseIdentifier:MyIdentifier] autorelease];
        pinView.draggable = NO;
        pinView.animatesDrop = NO;
        pinView.enabled = YES;
    } else {
        pinView.annotation = annotation;
    }
    if(annotation != mapView.userLocation){
        pinView.pinColor = MKPinAnnotationColorRed;
        pinView.canShowCallout = YES;
        // Add a detail disclosure button to the callout.
        pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinView.userInteractionEnabled = YES;
    } else {
        pinView.pinColor = MKPinAnnotationColorGreen;
    }
    return pinView;
}
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
    NSLog(@"Not show button, so not work");
}
...
@end
我的问题是,所有显示和工作,除了没有显示rightCalloutAccessoryView按钮.mapView已连接并在iphone视图上对CinemasMapController进行了删除操作(我也尝试[mapView setDelegate:self]).那么我做错了什么?
PS代码用线
pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
执行 - 由NSLog检查.
它的外观如何 - 没有按钮:

小智 10
在viewForAnnotation,在if (!pinView)块中,一个新的本地pinView变量被声明,而不致分配给外变量.
因此,外部pinView变量永远不会被设置(保持nil),因此地图视图会创建您看到的默认注释视图.