2

我已经添加UIViewController<MKMapViewDelegate> 了 .h 并且已经添加了

 -(void) viewDidLoad {
     self.mapView.delegate = self;
 }

但是 viewForAnnotation 方法从未调用过

MapViewController.h

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

   @interface Tela1ViewController : UIViewController<MKMapViewDelegate> {
       IBOutlet MKMapView *mapView;
   }

   @property (nonatomic, retain) MKMapView *mapView;
   @end

MapViewController.m

  -(void) viewDidLoad {
      self.mapView.delegate = self;
  }

  - (void)viewDidAppear:(BOOL)animated
  {
      AppDelegate *appDelegate = (AppDelegate *)[[UIApplication shared

      mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
      mapView.mapType = MKMapTypeSatellite;

      CLLocationCoordinate2D coord = {latitude: appDelegate.latitude, longitude: appDelegate.longitude};
      MKCoordinateSpan span = {latitudeDelta:0.2, longitudeDelta: 0.2};
      MKCoordinateRegion region = {coord, span};

      [mapView setRegion:region];

      PlaceMark *addAnnotation = [[PlaceMark alloc] initWithCoordinate:coord];  
      [mapView addAnnotation:addAnnotation];  
      [self.view addSubview:mapView];
  }

  - (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
  {
      NSLog(@"test");
  }
4

2 回答 2

3

好的,有几件事要在您的代码中修复...

MKMapView 的代表

nil。为什么?MKMapView因为您在viewDidLoad方法中设置了委托。但是当您查看时viewDidAppear:,您正在分配新的MKMapView并且您没有在那里设置委托。并且因为viewDidLoad在之前被调用viewDidAppear:,所以委托只是nil= 未设置。

呼唤超级

当您覆盖某些方法时,请阅读文档。因为您可以在viewDidAppear:文档中找到它,例如:

您可以覆盖此方法以执行与呈现视图相关的其他任务。如果你重写了这个方法,你必须在你的实现中调用 super 。

MKMapView & IBOutlet

而且也不明白为什么你有MKMapViewasIBOutlet然后你分配新MKMapView的并将它添加为子视图。此外,如果你IBOutlet真的连接到MKMapView你的 XIB 中的 a,你最终会得到两个MKMapViews,因为旧的(来自 XIB)没有从 superview 中删除。

你显然是在搞砸事情。去阅读更多关于 UIKit,...

于 2012-10-14T09:22:16.877 回答
0

尝试将 viewDidAppear 方法的最后几行替换为以下内容:

CLLocationCoordinate2D coord = {.latitude =  location.latitude, .longitude =  location.longitude};
MKCoordinateSpan span = {.latitudeDelta = 0.2, .longitudeDelta =  0.2};
MKCoordinateRegion region = {coord, span};

[mapView setRegion:region];

MapAnnotation *addAnnotation = [[MapAnnotation alloc] initWithCoordinate:coord];
[mapView addAnnotation:addAnnotation];
[self.view addSubview:mapView];
于 2012-10-14T05:07:09.337 回答