Как обрабатывать связь какао между несколькими классами контроллеров

Я новичок в Какао, может быть, эти вопросы очень простые. В настоящее время я разрабатываю приложение для Mac, использующее NSTabView, где вы можете переключаться между «приложением», «параметрами» и «статистикой».

Теперь мой подход заключается в создании трех классов контроллеров: AppControler, OptionsController и StatisticsController. Я создал для них объекты в файле .xib и связал соответствующие элементы пользовательского интерфейса с правильными объектами контроллера.

Мои вопросы: - Правильно ли это, иметь несколько объектов контроллера для NSTabView? - Когда я хочу, чтобы AppController получал информацию об опциях, как я могу установить связь между App- и OptionsController?

Спасибо!


person kadrian    schedule 09.10.2011    source источник


Ответы (3)


Я много боролся с такими вопросами, когда начал разработку Cocoa. В конце концов я обнаружил, что реального ответа нет. В Cocoa и Objective-C существует так много способов содрать шкуру с кошки, что в конечном итоге все зависит от вас.

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

На мой взгляд, это простое и эффективное решение. В конечном итоге вы получите циклические ссылки между контроллерами, но код загрузки/выгрузки Nib в Objective-C позаботится обо всем этом за вас.

person Carter    schedule 09.10.2011
comment
Hookup the outlets in interface builder and you are set to go. Как это сделать, если контроллеры являются классами Obj-C и не могут быть открыты в IB? - person Jeff; 22.06.2013
comment
Вы должны перетащить объект из палитры библиотеки объектов (в нижней правой части Interface Builder) в ваш файл IB. Затем выберите новый объект, и в инспекторе есть поле для изменения класса объекта на ваш собственный класс. - person Carter; 24.06.2013

Для представлений вкладок я обычно просто создаю один контроллер для всех вкладок в этом окне, хотя я, вероятно, разделил бы его, если бы использовал более 3 или 4 вкладок, и каждая вкладка требовала значительного объема кода для обработки действий. и розетки.

person lottscarson    schedule 11.10.2011

Обычно используется парадигма MVC. В вашем случае, если один контроллер создает или изменяет какой-либо параметр, вы каким-то образом устанавливаете его в модели (может быть так же просто, как некоторые пользовательские настройки по умолчанию), и если он используется в другом месте, вы читаете его из модели.

person EricLeaf    schedule 09.10.2011