Будучи новым для objective-c, cocoa и iPhone dev в целом, у меня есть сильное желание максимально использовать язык и рамки.
Один из ресурсов, которые я использую, - это заметки класса Stanford CS193P, которые они оставили в Интернете. Он включает в себя лекционные заметки, задания и образец кода, а так как курс был дан разработчиками 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 в методах делегата приложения. Fair 'nuff.
Немного дальше, мы получаем этот слайд, говорящий нам, что мы должны делать.
Страница 18/51:
Рекомендации по потоку данных
- Укажите точно, что нужно сообщить
- Определить входные параметры для вашего контроллера просмотра.
- Для обмена резервной копией иерархии используйте свободную связь
- Определить общий интерфейс для наблюдателей (например, делегирование)
Затем за этим слайдом следует то, что кажется слайдером места, где лектор, по-видимому, демонстрирует лучшие практики, используя пример с UIImagePickerController. Я хочу, чтобы видео было доступно!: (
Хорошо, так что... Боюсь, что мой objc-fu не так силен. Я также немного смущен последней строкой в приведенной выше цитате. Я делал свою долю участия в этом проекте, и я нашел то, что кажется достойной статьей, рассказывающей о различных методах наблюдений/уведомлений:
http://cocoawithlove.com/2008/06/five-approaches-to-listening-observing.html
Метод # 5 даже указывает делегатов как метод! Кроме того, объекты могут устанавливать только один делегат за раз. Итак, когда у меня есть несколько соединений с viewcontroller, что мне делать?
Хорошо, что создана банда. Я знаю, что могу легко использовать свои методы общения в делегате приложения, ссылаясь на несколько экземпляров viewcontroller в моем appdelegate, но я хочу, чтобы это делалось правильно.
Пожалуйста, помогите мне "поступить правильно", ответив на следующие вопросы:
- Когда я пытаюсь нажать новый диспетчер представлений в стеке UINavigationController, кто должен делать это нажатие. Какой класс/файл в моем коде является правильным местом?
- Когда я хочу повлиять на часть данных (значение iVar) в одном из моих UIViewControllers, когда я нахожусь в другом UIViewController, что такое "правильный" способ сделать это?
- Дайте нам возможность иметь только один делегат за один раз в объекте, как будет выглядеть реализация, когда лектор говорит "Определить общий интерфейс для наблюдателей (например, делегирование)". Например, пример псевдокода был бы здесь очень полезен.