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。なんで?MKMapViewinviewDidLoadメソッドのデリゲートを設定したためです。しかし、を見るとviewDidAppear:、新しいものを割り当てMKMapViewており、そこにデリゲートを設定していません。また、のviewDidLoad前にが呼び出されるためviewDidAppear:、デリゲートは単純にnil=設定されていません。

スーパーを呼び出す

一部のメソッドをオーバーライドする場合は、ドキュメントをお読みください。viewDidAppear:これは、たとえばドキュメントで見つけることができるためです。

このメソッドをオーバーライドして、ビューの表示に関連する追加のタスクを実行できます。このメソッドをオーバーライドする場合は、実装のある時点でsuperを呼び出す必要があります。

MKMapView&IBOutlet

また、なぜあなたがMKMapViewasを持っているのか理解していないのでIBOutlet、新しいものを割り当てMKMapViewてサブビューとして追加しています。また、が実際にXIBのにIBOutlet接続されている場合は、古いもの(XIBから)がスーパービューから削除されないため、2つのsになります。MKMapViewMKMapView

あなたは明らかに物事を台無しにしています。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 に答える