2012-02-09 2 views
0

Я работаю над отображением карты с аннотацией на ней. То, что я до сих порНастройка свойств аннотации вида карты

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]; 

Однако я получил ошибку, как показано ниже:

выражения не присваивается для заголовок, подзаголовок и координируют

Кто-нибудь есть какие-либо идеи по этому вопросу?

ответ

1

Во-первых, эти строки пытаются присвоить значение вызова метода, который является то, что ошибка говорит, вы не можете сделать:

[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.

+0

В любом случае, я иду на MKPointAnnotation. Спасибо за ваш совет – tranvutuan

1

Просто прочитайте документацию по адресу MKAnnotation protocol. Вы не должны назначать название, субтитры и координаты. Вы должны обеспечить реализацию этих методов в своем классе, соответствующих этому протоколу.

Так что лучше создать класс StoreAnnotation, который получит storeName, storeAddress и storeCoordinates или просто класс Store, если он есть, и он вернет соответствующие данные в методах протокола.

+0

но я думаю, что эти переменные являются атрибутом не метода, обряда? ... так как мы можем реализовать их – tranvutuan

+0

Это методы, которые вы можете видеть в ссылке протокола. И вы реализуете их так же, как и любой другой метод object-c instance. – macbirdie

+0

Я пошел в протокол MKAnnotation и нажал на Jump To, есть методы свойств и экземпляров. В свойствах это название, субтитры и координаты ... – tranvutuan

Смежные вопросы