0

ユーザーが選択したばかりの建物の場所を表すために、単一の MKPlacemark を追加する MKMapView があります。ユーザーは一度に 1 つの建物しか選択できません。新しい建物を選択したときに目印を新しい建物に移動したいだけです。彼らが選択した最初の建物では、問題なく機能し、地図上にピンが配置されます。setCoordinateただし、新しい建物を選択したときに目印を呼び出してマーカーの位置を更新しようとすると、-[MKPlacemark setCoordinate:]: unrecognized selector sent to instance

MyViewController.h には次のものがあります。

@property (nonatomic, strong)MKPlacemark *selectedBuildingPlacemark;

MyViewController.m 内

@synthesize selectedBuildingPlacemark;

...

if (self.selectedBuildingPlacemark == nil) {
        self.selectedBuildingPlacemark = [[MKPlacemark alloc] initWithCoordinate:myCoord addressDictionary:nil];
        [mapView addAnnotation:self.selectedBuildingPlacemark];
    }
    else {
        [self.selectedBuildingPlacemark setCoordinate:myCoord];
    }

MKPlacemark は MKAnnotation に準拠しているため、実装する必要があると思いましsetCoordinateた。誰かが私のやり方の誤りを教えてもらえますか?

4

2 に答える 2

3

のドキュメントにMKAnnotationは次のように書かれています。

ドラッグをサポートする注釈は、このメソッドを実装して注釈の位置を更新する必要があります。

したがって、メソッドsetCoordinate:はオプションであり、ドラッグをサポートするクラスによってのみ実装されます。のドキュメントはMKPlacemarkそのメソッドを参照していないため、実装されていません。

そのため、新しい建物を選択するたびに新しいインスタンスを作成する必要があります。

于 2012-03-10T15:19:09.957 に答える
1

特に an を使用する必要がない場合MKPlacemark(addressDictionary に nil を渡しているため、そのようには見えません)、MKPointAnnotation代わりにクラスを使用できます。

MKPointAnnotationメソッドを実装しますMKAnnotationが、追加しsetCoordinateます。

于 2012-03-10T18:26:54.217 に答える