MKAnnotation和setCoordinate:

时间:2012-08-19 02:32:08

标签: cocoa-touch mkannotation

我有一个符合MKAnnotation协议的自定义类。此类的一个实例由viewController和一个名为_mapView的MKMapView类型的对象保存。我已将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:方法,这似乎很奇怪。

我错过了什么?

1 个答案:

答案 0 :(得分:14)

当你说

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
“readonly”告诉编译器只为你的属性创建一个getter方法,而不是setter方法。

由于CLLocationCoordinate2D是C结构而不是对象,因此您可以使用:

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

如果您希望编译器自动创建getter和setter。