我有一个符合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:
方法,这似乎很奇怪。
我错过了什么?
答案 0 :(得分:14)
当你说
时@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
由于CLLocationCoordinate2D是C结构而不是对象,因此您可以使用:
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
如果您希望编译器自动创建getter和setter。