Будучи новим у розробці предметів Objective-c, какао та iPhone в цілому, у мене є сильне бажання максимально використати мову та рамки.
Один із ресурсів, якими я користуюся, - це примітки класу CS193P Стенфорда, які вони залишили в Інтернеті. Він включає в себе конспекти лекцій, завдання та зразок коду, а оскільки курс дав Apple Dev's, я, безумовно, вважаю, що це "з конячих вуст".
Веб-сайт класу:
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:
Як не ділитися даними
- Глобальні змінні чи одиночні
- Сюди входить делегат вашої програми
- Прямі залежності роблять ваш код менш використаним
- І складніше налагодження та тестування
Гаразд. Я з цим вниз. Не перекидайте сліпо всі ваші методи, які будуть використовуватися для спілкування між контролером перегляду, до делегата програми та посилайтеся на випадки перегляду контролерів у методах делегування програми. Справедливий нюх.
Трохи далі, ми отримаємо цей слайд говорить нам , що ми повинні робити.
Сторінка 18/51:
Кращі практики для потоку даних
- З’ясуйте, що саме потрібно повідомляти
- Визначте вхідні параметри контролера перегляду
- Для передачі резервної копії ієрархії використовуйте нещільне з'єднання
- Визначте загальний інтерфейс для спостерігачів (наприклад, делегування)
Після цього слайду слідує слайд власника місця, де лектор, очевидно, демонструє кращі практики, використовуючи приклад з UIImagePickerController. Я хочу, щоб відео були доступні! :(
Добре, так ... я боюся, що мій objc-fu не такий сильний. Мене також трохи бентежить заключний рядок у наведеній цитаті. Я робив свою справедливу частку гуглінгу з цього приводу, і я виявив, що це пристойна стаття, що розповідає про різні методи спостереження / сповіщення:
http://cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html
Метод №5 навіть вказує делегатів як метод! За винятком .... об'єктів може встановлювати лише один делегат одночасно. Тож коли я маю декілька комунікаційних каналів перегляду, що мені робити?
Гаразд, це створена банда. Я знаю, що я можу легко робити свої способи спілкування в делеґаті додатка, використовуючи посилання на декілька екземплярів перегляду в моєму додатку, але я хочу зробити цю справу правильно .
Будь ласка, допоможіть мені "зробити все правильно", відповівши на наступні запитання:
- Коли я намагаюся натиснути новий контролер перегляду на стек UINavigationController, хто повинен робити цей натиск. Який клас / файл у моєму коді є правильним місцем?
- Коли я хочу вплинути на частину даних (значення iVar) в одному з моїх контролерів UIViewControllers, коли я перебуваю в іншому UIViewController, який "правильний" спосіб це зробити?
- Зверніть увагу, що ми можемо мати на одному об'єкті одночасно встановлений делегат, як виглядатиме реалізація, коли лектор каже "Визначте загальний інтерфейс для спостерігачів (наприклад, делегування)" . Приклад псевдокоду був би тут дуже корисний, якщо це можливо.