Étant donné que je suis novice en matière d'Objective-C, de Cocoa et de développement pour l'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 de Stanford CS193P qu'ils ont laissées sur le Web. Elles comprennent des notes de cours, des devoirs et des exemples de code, et comme le cours a été donné par des développeurs d'Apple, je considère qu'il vient de la "bouche du cheval".
Site web de la classe :
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
Le cours 08 est lié à une mission consistant à construire une application basée sur UINavigationController qui comporte plusieurs UIViewControllers poussés sur la pile UINavigationController. C'est ainsi que fonctionne le UINavigationController. C'est logique. Cependant, la diapositive contient des avertissements sévères concernant la communication entre vos UIViewControllers.
Je vais citer un extrait de cette série de diapositives :
http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
Page 16/51 :
Comment ne pas partager les données
- Variables globales ou singletons
- Cela inclut votre délégué à l'application
- Les dépendances directes rendent votre code moins réutilisable
- Et plus difficile à déboguer et à tester
Ok. 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 faites référence aux instances du viewcontroller dans les méthodes du délégué d'application. Fair 'nuff.
Un peu plus loin, nous avons cette diapositive nous disant ce que nous devrait faire.
Page 18/51 :
Meilleures pratiques pour le flux de données
- Comprendre exactement ce qui doit être communiqué
- Définir les paramètres d'entrée pour votre contrôleur de vue
- Pour communiquer vers le haut de la hiérarchie, utiliser le 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 de remplacement où le conférencier démontre apparemment les meilleures pratiques en utilisant un exemple avec le UIImagePickerController. J'aimerais que les vidéos soient disponibles ! :(
Ok, donc... J'ai peur que mon objc-fu ne soit pas si fort. Je suis aussi un peu confus par la dernière ligne de la citation ci-dessus. J'ai fait ma part de recherches sur Google à ce sujet et j'ai trouvé ce qui semble être un article décent parlant des différentes méthodes des techniques d'observation/notification :
http://cocoawithlove.com/2008/06/five-approaches-to-listening-observing.html
La méthode n° 5 indique même les délégués comme une méthode ! Les objets Except.... ne peuvent définir qu'un seul délégué à la fois. Donc, lorsque j'ai plusieurs communications avec des contrôleurs de vues, que dois-je faire ?
Ok, c'est le gang de la mise en place. Je sais que je peux facilement faire mes méthodes de communication dans le délégué de l'application en référençant les multiples instances de viewcontroller dans mon délégué de l'application mais je veux faire ce genre de chose de la manière suivante droite manière.
Veuillez m'aider à "faire le bon choix" en répondant aux questions suivantes :
- Lorsque j'essaie de pousser un nouveau contrôleur de vue sur la pile UINavigationController, qui devrait faire cette poussée. Quel classe/fichier dans mon code est le bon endroit ?
- Lorsque je veux affecter un élément de données (la valeur d'une iVar) dans l'un de mes UIViewControllers alors que je suis dans un différents UIViewController, quelle est la "bonne" façon de procéder ?
- Étant donné que nous ne pouvons avoir qu'un seul délégué à la fois dans un objet, à quoi ressemblerait la mise en œuvre lorsque le professeur dit "Définir une interface générique pour les observateurs (comme la délégation)" . Un exemple en pseudocode serait très utile si possible.