我正在尝试在地图视图中标记位置。
首先,我在一个单独的类中实现了MKAnnotation
协议。
AddressAnnotation.h
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface AddressAnnotation : NSObject <MKAnnotation>
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
- (id)initWithCoordinates:(CLLocationCoordinate2D)location;
@end
AddressAnnotation.m
#import "AddressAnnotation.h"
@implementation AddressAnnotation
- (id)initWithCoordinates:(CLLocationCoordinate2D)location
{
self = [super init];
if (self)
{
self.coordinate = location;
}
return self;
}
@end
然后在视图控制器中,我实现了MKMapViewDelegate
。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
return nil;
}
static NSString *myIdentifier = @"myIndentifier";
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:myIdentifier];
if (!pinView)
{
pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:myIdentifier];
pinView.pinColor = MKPinAnnotationColorRed;
pinView.animatesDrop = NO;
}
return pinView;
}
在viewDidLoad
方法中,我初始化了AddressAnnotation
类的实例。
- (void)viewDidLoad
{
[super viewDidLoad];
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(34.421496, -119.70182);
AddressAnnotation *pinAnnotation = [[AddressAnnotation alloc] initWithCoordinates:coordinate];
[self.mapView addAnnotation:pinAnnotation];
}
我不断收到以下错误。
- [AddressAnnotation setCoordinate:]:无法识别的选择器发送到实例
我不确定我在这里做错了什么。有人可以帮帮我吗?
谢谢。
答案 0 :(得分:1)
问题是您定义了只读坐标属性。因此,在尝试设置它时会出现异常。只需删除您的坐标属性定义,因为这已由MKAnnotation协议提供。
答案 1 :(得分:0)
您的问题是coordinate
属性是只读的。而且,它已经由MKAnnotation
协议定义。
当您实现协议定义@properties时,您实际上必须@syntentize这些属性以在您的类中创建支持实例变量(ivar),或者,您必须为这些属性实现自定义setter和getter。
请记住:属性不仅仅是一个setter和getter方法,并且可以选择由ivar支持。由ivar支持是@ property的默认行为。
因此,简而言之,要在AddressAnnotation.h
文件中修复问题,请删除coordinate
属性并在AddressAnnotion.m
文件中添加:
// after the line @implementation Address Annotation
@syntetize coordinate = _coordinate;