Будучи новым объектно-ориентированным, какао и iPhone dev в целом, у меня есть сильное желание максимально использовать язык и рамки.Каков наилучший способ связи между контроллерами?
Один из ресурсов, которыми я пользуюсь, это примечания класса CS193P от Stanford, которые они оставили в Интернете. Он включает в себя лекционные заметки, задания и образец кода, а так как курс был дан разработчиками Apple, я определенно считаю, что это «из уст лошади».
Класс Сайт:
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
Лекция 08 связана с заданием построить на основе приложения UINavigationController, который имеет несколько UIViewControllers в стек UINavigationController. Вот как работает UINavigationController. Это логично. Однако на слайде есть некоторые серьезные предупреждения о связи между вашими UIViewControllers.
Я собираюсь процитировать это серьезное горок:
http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
Страница 16/51:
Как не обмениваться данными
- Глобальные переменные или одиночек
- Включает в себя ваш приложения делегат
- Прямые зависимости сделать код менее многоразовые
- И еще труднее отлаживать & тест
Ok. Я с этим схожу. Не слепо бросайте все ваши методы, которые будут использоваться для связи между диспетчером представлений в вашем делете приложения и ссылки на экземпляры viewcontroller в методах делегата приложения. Ярмарка.
Немного дальше, мы получаем этот слайд, говорящий нам, что мы должно сделать.
Страница 18/51:
Best Practices для потока данных
- Выяснить точно, что должно быть сообщено
- Определение входных параметров для контроллера представления
- Для обмена резервной копией иерархии, использовать свободный купе Pling
- Определить общий интерфейс для наблюдателей (как делегации)
Этот слайд затем следует, что, как представляется, пустышку место слайд, где преподаватель то, видимо, демонстрирует лучший используя пример с UIImagePickerController. Я хочу, чтобы видео было доступно! :(
Итак, я боюсь, что мой objc-fu не настолько силен. Я также немного смущен последней строкой в приведенной выше цитате. Я делал свою долю прибегая к помощи об этом, и я обнаружил, что, кажется, приличная статья говорить о различных методах наблюдений методов/Notification:
http://cocoawithlove.com/2008/06/five-approaches-to-listening-observing.html
Способ № 5 даже указывает делегатов как метода исключением .... объекты можно установить только один делегат за один раз. Поэтому, когда у меня есть множественная связь с диспетчером контроля, что мне делать?
Хорошо, это настроенная банда. Я знаю, что могу легко выполнить свои методы общения i n делегат приложения по ссылке - несколько экземпляров viewcontroller в моем appdelegate, но я хочу делать такие вещи вправо.
Пожалуйста, помогите мне «делать правильные вещи», ответив на следующие вопросы:
- Когда я пытаюсь нажать новый ViewController в стеке UINavigationController, кто должен делать этот толчок. Какой из класс/файл в моем коде является правильным местом?
- Когда я хочу воздействовать на некоторую часть данных (значение iVar) в одном из моих UIViewControllers, когда я нахожусь в разных UIViewController, что это за «правильный» способ сделать это?
- Дайте нам возможность установить только один делегат за раз в объекте, как будет выглядеть реализация, когда лектор говорит «Определите общий интерфейс для наблюдателей (например, делегирование)». Например, пример псевдокода был бы здесь очень полезен.
Некоторые из этих вопросов рассматриваются в этой статье от Apple - http://developer.apple.com/library/ios/# featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers.html –
Просто быстрое замечание: видео для класса Stanford CS193P теперь доступно через iTunes U. Последний (2012-13) можно увидеть на https://itunes.apple.com/us/course/coding-together-developing/id593208016, и я ожидаю, что будущие видео и слайды будут объявлены по адресу http://cs193p.stanford.edu –