7

MKAnnotation プロトコルに準拠するカスタム クラスがあります。このクラスのインスタンスは、タイプ MKMapView のオブジェクトとともに、viewController によって保持されます_mapView。viewController を _mapView のデリゲートに設定しました。私が宣言したカスタムクラスインターフェイスで:

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

MKAnnotation プロトコルごとに必要なためです。同じクラスの実装でも@synthesizeそれを行います。ただし、viewController から次のメッセージを送信すると:

[_mapView addAnnotation:myCustomClass];

エラーが発生します:

<NSInvalidArgumentException> -[myCustomClass setCoordinate:]: unrecognized selector sent to instance 0x1479e0

カスタムクラスの実装ファイルに入って定義すると

- (void) setCoordinate:(CLLocationCoordinate2D)newCoordinate
{
    coordinate = newCoordinate;
}

その後、注釈がマップに正常に追加されます。

メソッド@synthesize coordinate;の世話をするべきではありませんか?座標とメソッドのsetCoordinate:両方を書かなければならないのは奇妙に思えます。@synthesize(void) setCoordinate:

私は何が欠けていますか?

4

1 に答える 1

14

あなたが言う時

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

「読み取り専用」とは、セッターメソッドではなく、プロパティのゲッターメソッドのみを作成するようにコンパイラーに指示することです。

CLLocationCoordinate2DはC構造体であり、オブジェクトではないため、次を使用できます。

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

コンパイラーがゲッターとセッターの両方を自動的に作成するようにしたい場合。

于 2012-08-19T02:58:08.843 に答える