Будучи новичком в target-c, какао и iPhone-разработчике в целом, я очень хочу получить максимальную пользу от языка и фреймворков.
Одним из ресурсов, которые я использую, являются заметки Стэнфорда CS193P, которые они оставили в Интернете. Он включает в себя примечания к лекциям, задания и пример кода, и, поскольку курс читался разработчиками Apple, я определенно считаю его «изо рта лошади».
Веб-сайт класса:
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
Лекция 08 посвящена назначению для создания приложения на основе UINavigationController, в котором несколько стилей UIViewController помещены в стек UINavigationController. Вот как работает UINavigationController. Это логично. Однако на слайде есть несколько строгих предупреждений о связи между вашими UIViewControllers.
Я собираюсь процитировать этот серьезный слайд:
http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
Страница 16/51:
Как не делиться данными
- Глобальные переменные или синглтоны
- Это включает в себя вашу заявку делегата
- Прямые зависимости делают ваш код менее пригодным для повторного использования
- И более сложный для отладки и тестирования
Хорошо. Я покончил с этим. Не бросайте вслепую все ваши методы, которые будут использоваться для связи между viewcontroller, в ваш делегат приложения и ссылайтесь на экземпляры viewcontroller в методах делегата приложения. Ярмарка
Чуть дальше, мы получаем этот слайд, рассказывающий нам, что мы должны делать.
Страница 18/51:
Лучшие практики для потока данных
- Выясните, что именно нужно сообщить
- Определите входные параметры для вашего контроллера представления
- Для связи по иерархии используйте слабую связь
- Определить общий интерфейс для наблюдателей (например, делегирование)
Затем за этим слайдом следует то, что выглядит как слайд заполнителя, на котором лектор затем демонстрирует лучшие практики, используя пример с UIImagePickerController. Я хотел бы, чтобы видео были доступны! :(
Хорошо, так что ... я боюсь, что мой объект не так силен. Я также немного смущен последней строкой в приведенной выше цитате. Я делал свою честную акцию по поиску в Google и нашел то, что кажется приличной статьей, рассказывающей о различных методах наблюдения / уведомления:
http://cocoawithlove.com/2008/06/five-approaches-to -Прослушивание-observing.html
Метод № 5 даже указывает делегатов как метод! За исключением .... объекты могут устанавливать только один делегат за раз. Так что, когда у меня есть несколько представлений viewcontroller, что мне делать?
Хорошо, это настроенная банда. Я знаю, что могу легко использовать свои методы связи в делегате приложения, ссылаясь на множественные экземпляры viewcontroller в моем appdelegate, но я хочу сделать это правильно .
Пожалуйста, помогите мне «поступить правильно», ответив на следующие вопросы:
- Когда я пытаюсь вставить новый viewcontroller в стек UINavigationController, кто должен делать это push. Какой класс / файл в моем коде является правильным местом?
- Когда я хочу повлиять на какой-то фрагмент данных (значение iVar) в одном из моих UIViewController, когда я нахожусь в другом UIViewController, каков «правильный» способ сделать это?
- Предположим, что за один раз в объекте может быть установлен только один делегат, как будет выглядеть реализация, когда лектор говорит: «Определить общий интерфейс для наблюдателей (например, делегирование)» . Пример с псевдокодом будет очень полезен здесь, если это возможно.