设置地图视图注释属性

时间:2012-02-09 15:19:44

标签: iphone mapkit mkannotation

我正在制作一个带有注释的地图。到目前为止我所拥有的是

Annotation.h

#import <MapKit/MKAnnotation.h>
#import <Foundation/Foundation.h>

@interface Annotation : NSObject <MKAnnotation> 

@end

MapViewController.m

Annotation *pin = [[Annotation alloc] init];    
[pin title]       = storeName;   
[pin subtitle]    = storeAddress;   
[pin coordinate]  = region.center;       
[mapView addAnnotation:pin];

但是,我收到如下错误:

  

表达式不能分配给 标题,副标题和坐标

有没有人对这个问题有任何想法?

2 个答案:

答案 0 :(得分:2)

首先,这些行尝试为方法调用赋值,这是错误所说的你不能做的事情:

[pin title]       = storeName;   
[pin subtitle]    = storeAddress;   
[pin coordinate]  = region.center;       

他们应该是这样的:

pin.title       = storeName;   
pin.subtitle    = storeAddress;   
pin.coordinate  = region.center;       


但是,MKAnnotation协议将属性定义为readonly。为了能够设置它们,请在Annotation类中将它们声明为:

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;

并在@synthesize中添加Annotation.m行。


但是,如果您只需要titlesubtitlecoordinate属性,则无需创建自己的类来实现MKAnnotation。相反,只需使用已经实现这些属性的内置MKPointAnnotation类作为可设置:

MKPointAnnotation *pin = [[MKPointAnnotation alloc] init];


正如@macbirdie指出的那样,另一个选择就是让现有的Store类(如果有的话)实现MKAnnotation协议。

答案 1 :(得分:1)

请阅读MKAnnotation protocol上的文档。你不应该分配标题,副标题和坐标。您必须在符合此协议的类中提供这些方法的实现。

因此,如果您创建一个接收storeName,storeAddress和storeCoordinates的StoreAnnotation类,或者只是一个Store类(如果有的话),它会更好,它将在协议方法中返回适当的数据。