Не совсем верно - каждый UIViewController должен знать, как вызывать своих потомков.Для Apple предпочтительный путь навигации по представлениям - это ветвящееся дерево с предупреждением о вкладках, которые объединяют несколько контроллеров представления в один узел дерева.
Вы явно не обрабатываете загрузку.Обычно у вас есть достаточные отношения между вашими NIB, чтобы классы контейнера загружались автоматически.Какао будет тогда загружать представления всякий раз, когда они необходимы, но еще не загружены (что является целью loadView и viewDidLoad), и сохранять их до тех пор, пока предупреждение о нехватке памяти не потребует их очистки (что приводит к viewDidUnload).Относительно редко вы сами явно загружаете NIB (хотя ячейки табличного представления являются очевидным примером, когда программная загрузка NIB довольно распространена).
Таким образом, вы, вероятно, получите:
- заставка или предварительный просмотр первого контроллера представления, как Default.png
- контроллер представления, который, вероятно, отображает Default.png и имеет два выхода, идущих к контроллеру сбора данных и главному контроллеру
- когда пользователь нажимает кнопку на главном экране, спросите модель, нужен ли сбор данных.Если это так, то перейдите к контроллеру сбора данных, в противном случае перейдите к главному контроллеру
- , дайте контроллеру сбора данных выход на главный контроллер и дайте ему выполнить навигацию там в соответствующий момент
Вы получаете MainWindow.xib бесплатно при создании проекта на основе нового представления.Вероятно, самое простое - поместить ссылки на три подкласса UIViewController, но настроить каждый из них для загрузки из других файлов.Установите связи между ними в MainWindow.xib, установите ссылки на вещи в соответствующих представлениях в соответствующих XIB.
Это предотвратит сохранение нескольких экземпляров любых контроллеров и загрузку встроенного какао.механизмы гарантируют, что материал, занимающий значительные объемы памяти - представления - загружается только по требованию и хранится не дольше, чем позволяет пространство.
Нет необходимости связываться с родительскими контроллерами представления.Каждый контроллер представления уже знает, кто его представил, через свойство parentViewController.Поэтому, если контроллер представления хочет отклонить себя и вернуться к тому, кто его представил, вы можете просто выполнить:
[self.parentViewController dismissModalViewControllerAnimated:YES];
Поскольку модель в идеале является отдельной независимой вещью, все контроллеры действительно должны знать, какие другие контроллерыони могут представить, как заполнить себя из модели и как перенести данные обратно в модель.Вы редко сталкиваетесь с особенно сложными связями между контроллерами представления.