В поисках правильного шаблона (iPhone / Objective C) - PullRequest
0 голосов
/ 03 февраля 2010

РЕДАКТИРОВАТЬ: мне предложили реализовать шаблон стратегии (http://en.wikipedia.org/wiki/Strategy_pattern),, который, я думаю, я бы сделал как несколько объектов, реализующих протокол делегата в Objective-C. Это завершает инкапсуляцию I хочу, но при этом позволяю мне иметь общий контроллер вида в памяти.

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

Прямо сейчас этот класс имеет длину 1400 строк и имеет несколько беспорядочных операторов переключения. Например:

- (void) changeMiniView:(id)sender {

  if (self.track) {
    [self changeTrackMiniView:[sender selectedSegmentIndex]];
  } else if (self.waypoint) {
    [self changeWaypointMiniView:[sender selectedSegmentIndex]];
  } else if (self.photo) {
    [self changePhotoMiniView:[sender selectedSegmentIndex]];
  } else if (self.map) {
    [self changeMapMiniView:[sender selectedSegmentIndex]];
  }
}

Это было бы намного лучше, если бы я создал подклассы DetailViewController, но моя загадка состоит в том, что я хотел бы сохранить viewController в памяти и просто изменить некоторые элементы, чтобы у меня были четкие переходы, особенно на телефонах 3G.

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

Ответы [ 2 ]

4 голосов
/ 03 февраля 2010

Имейте текущее представление в поле в вашем объекте (а не по одному полю для каждого типа мини-просмотра) и реализуйте changeMiniView для каждого из них.

Тогда ваш метод будет выглядеть так:

- (void) changeMiniView: (id)sender {
    [self.currentMiniView changeMiniView: [sender selectedSegmentIndex]];
}
1 голос
/ 03 февраля 2010

Как насчет использования селектора?

- (void)viewDidLoad {
    if (self.track) {
        sel = @selector(changeTrackMiniView:);
    } else if (self.waypoint) {
        sel = @selector(changeWaypointMiniView:);
    } else if (self.photo) {
        sel = @selector(changePhotoMiniView:);
    } else if (self.map) {
        sel = @selector(changeMapMiniView:);
    }
}

- (void)changeTrackMiniView:(id)sender {
    ....
}

- (void)changeMiniView:(id)sender {
    [self performSelector:sel withObject:sender];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...