Étant nouveau dans le développement d'objectif-c, de cacao et d'iPhone en général, j'ai un fort désir de tirer le meilleur parti du langage et des frameworks.
L'une des ressources que j'utilise est les notes de cours CS193P de Stanford qu'ils ont laissées sur le Web. Il comprend des notes de cours, des devoirs et des exemples de code, et comme le cours a été donné par les développeurs d'Apple, je le considère définitivement comme "de la bouche du cheval".
Site Web de la classe:
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
La conférence 08 est liée à une affectation pour créer une application basée sur UINavigationController qui a plusieurs UIViewControllers poussés sur la pile UINavigationController. C'est ainsi que fonctionne UINavigationController. C'est logique. Cependant, il y a quelques avertissements sévères dans la diapositive concernant la communication entre vos UIViewControllers.
Je vais citer ce sérieux de diapositives:
http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
Page 16/51:
Comment ne pas partager de données
- Variables globales ou singletons
- Cela inclut votre délégué d'application
- Les dépendances directes rendent votre code moins réutilisable
- Et plus difficile à déboguer et tester
D'accord. Je suis d'accord avec ça. Ne jetez pas aveuglément toutes vos méthodes qui seront utilisées pour communiquer entre le viewcontroller dans votre délégué d'application et référencez les instances de viewcontroller dans les méthodes de délégué d'application. Fair 'nuff.
Un peu plus loin, nous voyons cette diapositive nous indiquant ce que nous devons faire.
Page 18/51:
Meilleures pratiques pour le flux de données
- Déterminez exactement ce qui doit être communiqué
- Définissez les paramètres d'entrée pour votre contrôleur de vue
- Pour communiquer en arrière dans la hiérarchie, utilisez un couplage lâche
- Définir une interface générique pour les observateurs (comme la délégation)
Cette diapositive est ensuite suivie de ce qui semble être une diapositive d'espace réservé où le conférencier démontre ensuite apparemment les meilleures pratiques à l'aide d'un exemple avec UIImagePickerController. J'aimerais que les vidéos soient disponibles! :(
Ok, alors ... j'ai bien peur que mon objc-fu ne soit pas si fort. Je suis également un peu confus par la dernière ligne de la citation ci-dessus. J'ai fait ma part de googler à ce sujet et j'ai trouvé ce qui semble être un article décent parlant des différentes méthodes d'observation / techniques de notification:
http://cocoawithlove.com/2008/06/five-approaches-to -écoute-observation.html
La méthode n ° 5 indique même les délégués comme méthode! Sauf que .... les objets ne peuvent définir qu'un seul délégué à la fois. Alors, quand j'ai une communication avec plusieurs viewcontroller, que dois-je faire?
Ok, c'est le gang mis en place. Je sais que je peux facilement faire mes méthodes de communication dans le délégué d'application en faisant référence aux multiples instances de viewcontroller dans mon appdelegate, mais je veux faire ce genre de chose de la bonne manière.
S'il vous plaît, aidez-moi à «faire ce qu'il faut» en répondant aux questions suivantes:
- Lorsque j'essaie de pousser un nouveau viewcontroller sur la pile UINavigationController, qui devrait faire cette poussée. Quelle classe / fichier dans mon code est le bon endroit?
- Lorsque je veux affecter un élément de données (valeur d'un iVar) dans l'un de mes UIViewControllers lorsque je suis dans un autre UIViewController, quelle est la «bonne» façon de le faire?
- Compte tenu du fait que nous ne pouvons avoir qu'un seul délégué à la fois dans un objet, à quoi ressemblerait l'implémentation lorsque le conférencier dit "Définir une interface générique pour les observateurs (comme la délégation)" . Un exemple de pseudocode serait extrêmement utile ici si possible.