Będąc nowicjuszem w zakresie programowania Objective-C, Cocoa i iPhone'a w ogóle, pragnę jak najlepiej wykorzystać język i ramy.
Jednym z zasobów, z których korzystam, są notatki z klasy CS193P Stanforda, które pozostawili w Internecie. Zawiera notatki do wykładów, zadania i przykładowy kod, a ponieważ kurs został poprowadzony przez programistów Apple, zdecydowanie uważam, że jest on „z końskiej paszczy”.
Strona internetowa klasy:
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
Wykład 08 jest powiązany z zadaniem zbudowania aplikacji opartej na UINavigationController, która ma wiele UIViewControllers wypychanych na stos UINavigationController. Tak działa UINavigationController. To logiczne. Jednak na slajdzie znajdują się poważne ostrzeżenia dotyczące komunikacji między kontrolerami UIViewControllers.
Cytuję z tego poważnego slajdu:
http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
Strona 16/51:
Jak nie udostępniać danych
- Zmienne globalne lub pojedyncze
- Obejmuje to delegata aplikacji
- Bezpośrednie zależności sprawiają, że kod jest trudniejszy do ponownego wykorzystania
- I trudniejsze do debugowania i testowania
Dobrze. Nie mam tego. Nie wrzucaj na ślepo wszystkich metod, które będą używane do komunikacji między kontrolerem widoku do delegata aplikacji i odwołuj się do wystąpień viewcontroller w metodach delegata aplikacji. Fair 'nuff.
Nieco dalej otrzymujemy ten slajd, który mówi nam, co powinniśmy zrobić.
Strona 18/51:
Najlepsze praktyki dotyczące przepływu danych
- Dowiedz się dokładnie, co należy przekazać
- Zdefiniuj parametry wejściowe dla kontrolera widoku
- Do komunikacji w górę hierarchii użyj luźnego połączenia
- Zdefiniuj ogólny interfejs dla obserwatorów (np. Delegowanie)
Po tym slajdzie następuje slajd, który wydaje się być slajdem zastępczym, na którym wykładowca następnie najwyraźniej demonstruje najlepsze praktyki na przykładzie z UIImagePickerController. Chciałbym, żeby filmy były dostępne! :(
Ok, więc ... Obawiam się, że moje objc-fu nie jest tak mocne. Jestem też trochę zdezorientowany ostatnią linią powyższego cytatu. Sporo robiłem w Google na ten temat i znalazłem przyzwoity artykuł opisujący różne metody technik obserwacji / powiadamiania:
http://cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html
Metoda nr 5 wskazuje nawet delegatów jako metodę! Z wyjątkiem obiektów .... można ustawić tylko jednego delegata naraz. Więc kiedy mam komunikację z wieloma kontrolerami widoku, co mam zrobić?
Ok, to gang z ustawieniami. Wiem, że mogę łatwo wykonywać moje metody komunikacji w delegacie aplikacji, korzystając z wielu wystąpień kontrolera widoku w moim appdelegate, ale chcę to zrobić we właściwy sposób.
Pomóż mi „postępować właściwie”, odpowiadając na następujące pytania:
- Kiedy próbuję wypchnąć nowy kontroler widoku na stosie UINavigationController, kto powinien wykonywać to wypychanie. Która klasa / plik w moim kodzie jest właściwym miejscem?
- Kiedy chcę wpłynąć na niektóre dane (wartość iVar) w jednym z moich kontrolerów UIViewControllers, gdy jestem w innym UIViewController, jaki jest „właściwy” sposób, aby to zrobić?
- Daj nam tylko jednego delegata ustawionego w danym momencie w obiekcie, jak wyglądałaby implementacja, gdy prowadzący powie: „Zdefiniuj ogólny interfejs dla obserwatorów (np. Delegacja)” . Przykład pseudokodu byłby tutaj bardzo pomocny, jeśli to możliwe.