2012-04-16 15 views
0

I'm創建與地圖,並使用以下類的註釋的圖:MKAnnotation doesn't觸發銷點引法

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h> 

@interface ContactDetailAnnotation : NSObject <MKAnnotation> 

- (id) initWithLatitude:(CLLocationDegrees) lat longitude:(CLLocationDegrees) lng; 
- (id) initWithCoordinate:(CLLocationCoordinate2D) coordinateArg; 

@property (unsafe_unretained) CLLocationDegrees latitude; 
@property (unsafe_unretained) CLLocationDegrees longitude; 
@property (unsafe_unretained, nonatomic) CLLocationCoordinate2D coordinate; 

@end 

的問題是,該方法:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation 

用於繪製我的點不被觸發。 如果我使用

self.myMap.showsUserLocation = TRUE;  

的方法trigered,所以問題必須是在我創建的類。

我的.m

#import "ContactDetailAnnotation.h" 

@implementation ContactDetailAnnotation 

@synthesize latitude = _latitude, longitude = _longitude, coordinate = _coordinate; 

- (id) initWithCoordinate:(CLLocationCoordinate2D) coordinateArg 
{ 
    self.coordinate = coordinateArg; 

    return self; 
} 

- (id) initWithLatitude:(CLLocationDegrees)lat longitude:(CLLocationDegrees)lng 
{ 
    self.latitude = lat; 
    self.longitude = lng; 

    return self; 
} 

- (CLLocationCoordinate2D) coordinate 
{ 
CLLocationCoordinate2D coord = {self.latitude, 
           self.longitude}; 
return coord; 
} 

@end 
+0

應該不需要重載' - (CLLocationCoordinate2D)座標方法。 – 2012-04-16 20:21:08

+0

如果它刪除該方法,它會崩潰。 – bruno 2012-04-16 21:41:58

回答

0

你的註釋添加到的MapView的annotations陣列?

編輯

這裏有一個最基本的實現,爲我工作:

MyAnnotation.h:

#import <Foundation/Foundation.h> 
#import <Mapkit/Mapkit.h> 

@interface MyAnnotation : NSObject <MKAnnotation> 
{ 
    CLLocationCoordinate2D coordinate; 
} 

@property (nonatomic) CLLocationCoordinate2D coordinate; 

- (id) initWithCoordinate:(CLLocationCoordinate2D)aCoordinate; 

@end 

MyAnnotation.m

#import "MyAnnotation.h" 

@implementation MyAnnotation 

@synthesize coordinate; 

- (id) initWithCoordinate:(CLLocationCoordinate2D)aCoordinate 
{ 
    coordinate = aCoordinate; 
    return self; 
} 

@end 

我見控制器:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CLLocationCoordinate2D coordinate = {42.149,-74.9384}; 
    MyAnnotation *myAnnotation = [[MyAnnotation alloc] initWithCoordinate:coordinate]; 
    [self.mapView addAnnotation:myAnnotation]; 
} 

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    MKAnnotationView *annotationView = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"Identifier"]; 
    if (annotationView == nil) { 
     annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Identifier"]; 
    } 
    return annotationView; 
} 
+0

是[self.myMap addAnnotation:self.ContactDetailAnnotation]; – bruno 2012-04-16 21:10:39

+0

然後嘗試取出所有這些init方法和實例變量,並使用'setCoordinate:'設置座標。另外,將註釋記錄在'annotations'數組中以查看它包含的內容。 – 2012-04-16 21:18:08

+0

哦,並且使用'initWithLatitude:longitude:'實際上不會設置註釋的重要部分,它是'coordinate'屬性。我認爲你必須在某個階段調用'[super init]'。 – 2012-04-16 21:19:37