Настройка свойств аннотации вида карты - PullRequest
0 голосов
/ 09 февраля 2012

Я работаю над отображением карты с аннотацией на ней.Пока что у меня есть

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 ]

2 голосов
/ 09 февраля 2012

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

[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 голос
/ 09 февраля 2012

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

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

...