7

我有一个符合 MKAnnotation 协议的自定义类。这个类的一个实例由一个 viewController 持有,还有一个 MKMapView 类型的对象,称为_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;

“只读”是告诉编译器只为您的属性创建一个 getter 方法,而不是一个 setter 方法。

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

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

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

于 2012-08-19T02:58:08.843 回答