Управление несколькими контроллерами представления и данными - PullRequest
1 голос
/ 19 сентября 2009

У моего приложения есть главный экран, с которого пользователь всегда запускает, и с которого я хочу, чтобы программно отображались другие виды. Я настроил приложение идентично подходу, описанному в «Начале разработки iPhone» Ch. 6, который должен использовать RootViewController, который загружается в другие контроллеры представления.

В книге используется кнопка для запуска загрузки следующего контроллера представления, но в моем приложении мне нужно поменять местами контроллеры в конце вызовов функций и поделиться данными (обработанными UIImages и т. Д.) Между представлениями. Я не использую панель вкладок или контроллер навигации.

Что мне интересно, так это то, должен ли я сделать свой MainViewController корневым контроллером и представить оттуда ModalViewControllers? Я бы хотел сохранить корневую модель, но я не совсем понимаю, как все это подключить и обмениваться данными. Я видел посты, в которых упоминаются протоколы и уведомления, но я еще не обдумал это. Любой совет приветствуется.

1 Ответ

1 голос
/ 19 сентября 2009

Что вы хотите сделать, это добавить свойство Какао в ваш контроллер основного представления, которое ссылается на экземпляры объектов, которые вы хотите использовать совместно с подчиненными контроллерами представления.

Например, если мы хотим поделиться NSArray, мы указываем его свойство в заголовке контроллера основного вида:

@interface MainViewController : UIViewController {
  NSArray *myArray;
}

@property (nonatomic, retain) NSArray *myArray;

@end

В реализации добавьте директиву @synthesize и запомните release массив в -dealloc:

@implementation MainViewController

@synthesize myArray;

...

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

@end

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

В вашем главном контроллере представления, когда вы готовы выдвинуть подчиненный контроллер представления, вы соответственно устанавливаете свойство подчиненного контроллера представления непосредственно перед нажатием:

- (void) pushSubordinateViewController {
  SubordinateViewController *subVC = [[SubordinateViewController alloc] initWithNibName:@"SubordinateViewController" bundle:nil];
  subVC.myArray = self.myArray; // this sets the sub view controller's myArray property
  [self.navigationController pushViewController:subVC animated:YES];
  [subVC release];
}

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

Устанавливая ссылки таким образом, каждый контроллер представления указывается на один и тот же массив, содержащий нужные элементы.

Чтобы использовать массив, просто позвоните self.myArray, например, [self.myArray objectAtIndex:index] чтобы получить объект по заданному индексу.

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