我正在制作一个带有注释的地图。到目前为止我所拥有的是
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];
但是,我收到如下错误:
表达式不能分配给 标题,副标题和坐标
有没有人对这个问题有任何想法?
答案 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
行。
但是,如果您只需要title
,subtitle
和coordinate
属性,则无需创建自己的类来实现MKAnnotation
。相反,只需使用已经实现这些属性的内置MKPointAnnotation
类作为可设置:
MKPointAnnotation *pin = [[MKPointAnnotation alloc] init];
正如@macbirdie指出的那样,另一个选择就是让现有的Store
类(如果有的话)实现MKAnnotation
协议。
答案 1 :(得分:1)
请阅读MKAnnotation protocol上的文档。你不应该分配标题,副标题和坐标。您必须在符合此协议的类中提供这些方法的实现。
因此,如果您创建一个接收storeName,storeAddress和storeCoordinates的StoreAnnotation
类,或者只是一个Store类(如果有的话),它会更好,它将在协议方法中返回适当的数据。