Siendo nuevo en el desarrollo de Objective-C, Cocoa y iPhone en general, tengo un fuerte deseo de aprovechar al máximo el lenguaje y los marcos.
Uno de los recursos que estoy usando son las notas de clase CS193P de Stanford que han dejado en la web. Incluye notas de clase, tareas y código de muestra, y dado que el curso fue impartido por los desarrolladores de Apple, definitivamente lo considero "de boca del caballo".
Sitio web de la clase:
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
La lección 08 está relacionada con una tarea para construir una aplicación basada en UINavigationController que tiene múltiples UIViewControllers introducidos en la pila de UINavigationController. Así es como funciona el UINavigationController. Eso es logico. Sin embargo, hay algunas advertencias severas en la diapositiva sobre la comunicación entre sus UIViewControllers.
Voy a citar de esta serie de diapositivas:
http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
Página 16/51:
Cómo no compartir datos
- Variables globales o singletons
- Esto incluye su delegado de aplicación
- Las dependencias directas hacen que su código sea menos reutilizable
- Y más difícil de depurar y probar
Okay. Estoy abajo con eso. No arroje ciegamente todos sus métodos que se utilizarán para comunicarse entre el viewcontroller en su delegado de aplicaciones y haga referencia a las instancias de viewcontroller en los métodos de delegado de aplicaciones. Justo 'nuff.
Un poco más adelante, obtenemos esta diapositiva nos dice lo que debemos hacer.
Página 18/51:
Mejores prácticas para el flujo de datos
- Averigüe exactamente lo que debe comunicarse
- Defina los parámetros de entrada para su controlador de vista
- Para comunicar una copia de seguridad de la jerarquía, use acoplamiento flexible
- Definir una interfaz genérica para observadores (como delegación)
Luego, esta diapositiva es seguida por lo que parece ser una diapositiva de marcador de posición donde el profesor aparentemente demuestra las mejores prácticas utilizando un ejemplo con el UIImagePickerController. ¡Ojalá los videos estuvieran disponibles! :(
Ok, entonces ... me temo que mi objc-fu no es tan fuerte. También estoy un poco confundido por la línea final en la cita anterior. He estado haciendo una buena parte de googlear sobre esto y encontré lo que parece ser un artículo decente que habla sobre los diversos métodos de técnicas de Observación / Notificación:
http://cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html
¡El método # 5 incluso indica delegados como método! Excepto ... los objetos solo pueden establecer un delegado a la vez. Entonces, cuando tengo comunicación de múltiples controles de vista, ¿qué debo hacer?
Ok, esa es la pandilla preparatoria. Sé que puedo hacer fácilmente mis métodos de comunicación en el delegado de la aplicación por referencia a las múltiples instancias del controlador de vista en mi delegado de la aplicación, pero quiero hacer este tipo de cosas de la manera correcta .
Por favor, ayúdame a "hacer lo correcto" respondiendo las siguientes preguntas:
- Cuando estoy tratando de empujar un nuevo viewcontroller en la pila UINavigationController, quién debería estar haciendo este empuje. ¿Qué clase / archivo en mi código es el lugar correcto?
- Cuando quiero afectar algún dato (valor de un iVar) en uno de mis UIViewControllers cuando estoy en un UIViewController diferente , ¿cuál es la forma "correcta" de hacer esto?
- Tenga en cuenta que solo podemos tener un delegado establecido a la vez en un objeto, ¿cómo sería la implementación cuando el profesor diga "Definir una interfaz genérica para los observadores (como la delegación)" . Un ejemplo de pseudocódigo sería muy útil aquí si es posible.