Вопрос объектно-ориентированного дизайна, iPhone - PullRequest
2 голосов
/ 16 июля 2011

Извините, я все еще новичок и просто учусь программировать на ходу и хочу начать с правильной ноги, изучая хороший дизайн заранее.Я использую CLLocationManager и MKReverseGecoder, чтобы получить мое местоположение.В моем методе MKReverseGecoderDelegate я создаю свою аннотацию для отображения в MKMapView.В моей выноске я использую индикатор раскрытия подробностей, чтобы вызвать еще один UITableView, который хорошо отображает ваш текущий адрес, а не смотреть на маленький черный пузырь выноски.

Какой хороший способ для моего DetailViewController (UITableView) получить данные?У меня в первом классе есть ивары для адреса, штата, почтового индекса.В моем MKReverseGecoderDelegate установите эти ивары, когда я получу эту информацию.(Причина, по которой я думаю, что мне понадобятся ivars, заключается в том, что мой метод получения этой информации в MKReverseGeocoderDelegate отличается от displayDetailViewController).И затем у меня есть мой DetailViewController с теми же значениями, и когда я иду, чтобы отобразить DetailViewController, установить те же переменные?Это кажется излишним.

Любая помощь будет принята с благодарностью.Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 июля 2011

Если вы выполняете обратное геокодирование по требованию, инициализируйте DetailViewController с координатой аннотации. Примерно так:

- (id)initWithCoordinate:(CLLocation*)location {
    if (self = [super initWithNibName:@"DetailController" bundle:nil]) {
        self.location = location;
    }
    return self;
}

Это обычный шаблон для создания контроллеров, поскольку он дает понять пользователю контроллера, что контроллер зависит от параметра местоположения. Другие альтернативы (глобальные переменные или одиночный код) не так чисты, потому что они скрывают информацию и усложняют понимание контроллера и тестирование модулей.

Затем позвольте контроллеру запустить асинхронную задачу, чтобы выполнить геокодирование, установить себя в качестве делегата и представить информацию, когда это будет сделано.

0 голосов
/ 16 июля 2011

Один вариант

Объявите пользовательский класс, наследующий NSObject, как

@interface YourClassName : NSObject 
{
     NSString *address;
     NSString *state;
     NSString *zipcode;
}

@property(nonatomic, retain) NSString *address;
@property(nonatomic, retain) NSString *state;
@property(nonatomic, retain) NSString *zipcode;
@end

@implementation YourClassName
@synthesize address,state,zipcode;

-(void)dealloc
{
     [super dealloc];
     [address release];
     [state release];
     [zipcode release];
}
@end


//Create object of YourClassName and set values
YourClassName *objYourClassName = [[YourClassName alloc] init];
objYourClassName.address = @"YourValue";
objYourClassName.state = @"YourValue";
objYourClassName.zipcode = @"YourValue";

Pass this object to your DetailViewController by one method after creating method like

-(void)setDetailsForDetailViewController:(YourClassName*)pObjYourClassName
{
     //self.objOfYourClassName is property declared in your detailviewcontroller.
     self.objOfYourClassName = pObjYourClassName; //You can use self.objOfYourClassName to set values in TableViewController. 
}

Если вы застряли где-нибудь, дайте мне знать, я был бы рад помочь вам исправить это.

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