2012-07-06 18 views
0

我不斷收到與此代碼這個語義問題(「MyAnnotation」不能爲「initWithDictionary:」響應),即時通訊添加註解使用的plist地圖。「MyAnnotation」可不迴應「initWithDictionary:」

即使它顯示我希望它的引腳和一切,我得到一個語義問題,不能似乎解決問題

,如果有人能夠幫助這將是巨大的感謝

繼承人的代碼,問題出在//BrewMapViewController.m錯誤在這一行

MyAnnotation * annotation = [[MyAnnotation alloc] initWithDictionary:breweryDict];

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

@interface MyAnnotation : NSObject <MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
    NSString *title; 
    NSString *subtitle; 
    NSString *test; 
} 

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


@end 


/*MyAnnotation.m*/ 
#import "MyAnnotation.h" 
@implementation MyAnnotation 
@synthesize coordinate, title, subtitle, test; 

- (id) initWithDictionary:(NSDictionary *) dict 
{ 
    self = [super init]; 
    if (self != nil) { 
     coordinate.latitude = [[dict objectForKey:@"latitude"] doubleValue]; 
     coordinate.longitude = [[dict objectForKey:@"longitude"] doubleValue]; 
     self.title = [dict objectForKey:@"name"]; 
     self.subtitle = [dict objectForKey:@"address"]; 
     self.test = [dict objectForKey:@"test"]; 
    } 
    return self; 
} 


@end 


/*BrewMapViewController.h*/ 
#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface BrewMapViewController : UIViewController <MKMapViewDelegate> { 
    IBOutlet MKMapView *map; 

    NSArray *breweries; 
} 

@end 


/*BrewMapViewController.m*/ 

#import "BrewMapViewController.h" 

#import "MyAnnotation.h" 

@implementation BrewMapViewController 


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    breweries = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
                 pathForResource:@"test" 
                 ofType:@"xml"]]; 

    double minLat = [[breweries valueForKeyPath:@"@min.latitude"] doubleValue]; 
    double maxLat = [[breweries valueForKeyPath:@"@max.latitude"] doubleValue]; 
    double minLon = [[breweries valueForKeyPath:@"@min.longitude"] doubleValue]; 
    double maxLon = [[breweries valueForKeyPath:@"@max.longitude"] doubleValue]; 

    MKCoordinateRegion region; 
    region.center.latitude = (maxLat + minLat)/2.0; 
    region.center.longitude = (maxLon + minLon)/2.0; 
    region.span.latitudeDelta = (maxLat - minLat) * 1.05; 
    region.span.longitudeDelta = (maxLon - minLon) * 1.05; 
    map.region = region; 

    for (NSDictionary *breweryDict in breweries){ 
     MyAnnotation *annotation = [[MyAnnotation alloc] initWithDictionary:breweryDict]; 
     [map addAnnotation:annotation]; 
     [annotation release]; 
    } 
} 


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

    if (map.userLocation == annotation){ 
     return nil; 
    } 

    NSString *identifier = @"MY_IDENTIFIER"; 

    MKAnnotationView *annotationView = [map dequeueReusableAnnotationViewWithIdentifier:identifier]; 
    if (annotationView == nil){ 
     annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation 
                 reuseIdentifier:identifier] 
          autorelease]; 
     annotationView.image = [UIImage imageNamed:@"beer.png"]; 
     annotationView.canShowCallout = YES; 

     annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 

     annotationView.leftCalloutAccessoryView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pretzel.png"]] autorelease]; 

    } 
    return annotationView; 
} 

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    NSLog(@"I've been tapped"); 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 


- (void)dealloc { 
    [breweries release]; 
    [map release]; 
    [super dealloc]; 
} 

@end 

回答

1

你必須把方法簽名- (id) initWithDictionary:(NSDictionary *) dict INT Ø爲了告訴BrewMapViewController頭文件中,該方法存在:

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

@interface MyAnnotation : NSObject <MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
    NSString *title; 
    NSString *subtitle; 
    NSString *test; 
} 

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

- (id) initWithDictionary:(NSDictionary *) dict; 

@end 
+0

非常感謝,不敢相信我錯過了,我一直在尋找它幾個小時,再次感謝很多 – 2012-07-07 06:29:11