У меня 30 аннотаций и растет.Ищете более простой способ кодирования этого? - PullRequest
3 голосов
/ 16 мая 2011

Я кодирую несколько аннотаций в проекте.На данный момент у меня 30 аннотаций и растет.Мне интересно, есть ли более простой способ создания классов annotation.h и annotation.m для каждой отдельной аннотации.

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

Так, например, один из классов аннотаций выглядит так:

Annotation.h:

//Annotation.h

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

@interface Annotation : NSObject {

}

@end

Annotation.m:

//Annotation.m

#import "Annotation.h"

@implementation Annotation

-(CLLocationCoordinate2D)coordinate;
{
    CLLocationCoordinate2D theCoordinate;
    theCoordinate.latitude = -45.866416;
    theCoordinate.longitude = 170.519931;
    return theCoordinate; 
}

-(NSString *)title
{
    return @"Title";
}

-(NSString *)subtitle
{
    return @"Subtitle";
}

-(void)dealloc
{
    [super dealloc];
}

@end

Я думаю, что чтение в файле CSV со всеми аннотациями будет лучшим способом, любой выбранный мной вариант приведет к переписыванию большого количества кода, поэтому язадаю этот вопрос, прежде чем что-то делать.У кого-нибудь есть предложения?

Ответы [ 2 ]

3 голосов
/ 16 мая 2011

К сожалению, пример приложения MapCallouts не дает хорошего примера того, как реализовать универсальный класс аннотаций.

Ваш класс, реализующий протокол MKAnnotation, может предоставить настраиваемое свойство coordinate или пользовательский метод init, который принимает координаты.

Однако, поскольку вы используете iOS 4.0, более простой вариант - просто использовать предопределенный класс MKPointAnnotation, который предоставляет свойства, которые вы можете установить. Например:

MKPointAnnotation *annot = [[MKPointAnnotation alloc] init];
annot.title = @"Title";
annot.subtitle = @"Subtitle";
annot.coordinate = CLLocationCoordinate2DMake(-45.866416, 170.519931);
[mapView addAnnotation:annot];
[annot release];

Данные аннотации, конечно, могут поступать откуда угодно, и вы можете циклически перемещаться по данным, чтобы создавать аннотации на карте.

2 голосов
/ 16 мая 2011

Возможно создать массив словарных элементов аннотаций (широта, долгота, заголовок, подзаголовок) и сохранить их в виде списка?

Или, может быть, использовать базовую структуру данных и хранить элементы в базе данных sqlite?

Может, эта ссылка тоже поможет? Отображение ограниченного количества отсортированных аннотаций в Mapview

...