De nombreux View Controllers
mushu
Membre
Bonjour,
je suis en train de développer un application contenant un menu.
Chaque élément de menu appelle (pushViewController) un ViewController différent.
Je me demandais du point de vue technique et optimisation,
_vaut-il mieux importer tous les ViewController dans le .h et faire un big if / switch pour savoir lequel pusher
ou
_vaut-il mieux faire de l'appel de classe dynamique, genre
Modo: le titre du sujet a été modifié pour être plus parlant. Merci de faire des efforts en ce sens.
je suis en train de développer un application contenant un menu.
Chaque élément de menu appelle (pushViewController) un ViewController différent.
Je me demandais du point de vue technique et optimisation,
_vaut-il mieux importer tous les ViewController dans le .h et faire un big if / switch pour savoir lequel pusher
ou
_vaut-il mieux faire de l'appel de classe dynamique, genre
[font=Consolas, Menlo, Monaco,]
<br />
id myGreatObject = [[classToUseToCreateNewObjects alloc] init];<br />
[/font]
[font=Consolas, Menlo, Monaco,]?[/font]
[font=Consolas, Menlo, Monaco,]Bien cordialement[/font]
Modo: le titre du sujet a été modifié pour être plus parlant. Merci de faire des efforts en ce sens.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Mais si mon menu est conséquent, et surtout que dans tous les cas quand je fais un push j'ai juste à allouer une instance de la bonne classe de ViewController et à la pusher (mais pas besoin de configurer les propriétés de ladite instance selon les cas, parfois initialiser telle propriété avec telle valeur, parfois telle autre propriété avec telle autre valeur...), alors je profiterai sans doute plutôt de l'aspect dynamique du runtime :
- J'associe (dans un NSDictionary par exemple) à chaque élément de menu le nom de la classe de ViewController à utiliser
- Lors du clic sur une cellule, je récupère le nom de la classe, je fais un petit NSClassFromString pour récupérer un objet "Class", et je fais un alloc/init/autorelease dessus pour le pousser (pushViewController) directement
- Avantage de cette méthode, c'est qu'elle est générique.
- Inconvénient, c'est qu'il n'y a du coup aucune validation par le compilateur : si je fais une coquille et orthographie mal le nom d'une des classes dans mon NSDictionary qui associe une classe à chaque élément du menu, le compilateur ne va rien me dire mais ça va crasher au runtime.
- Alternative intermédiaire, je fais cette méthode mais au lieu de mettre en dur les noms des classes à associer, sous forme de NSString constante, à chaque élément de menu (et de ce fait risquant de faire une coquille et d'avoir des crash au runtime), utiliser NSStringFromClass([MonViewController class]). Et importer le "MonViewController.h" dans mon .m. Comme ça le compilateur va gueuler si je fais une faute dans le nom de ma classe, contrairement à si j'avais mis le nom directement @MonViewController.
Je ne vois pas l'intérêt de procéder ainsi. Autant instancier directement avec le bon nom de la classe puisqu'on importe le .h.
Alors que si tu as par exemple un NSArray qui liste tes 50 classes de UIViewControllers dans ton menu, dans la méthode "didSelectRowAtIndexPath" il suffit de faire : Et basta, pas de switch avec 50 cas.
D'ailleurs, ne pourrait-on pas mettre les objets-classes dans un NSArray:
Je n'ai pas essayé, mais ça doit fonctionner, non ?
Dans l'exemple donné, un seul même ViewController est utilisé pour chaque élément de menu.
Perso ce qui m'intéresse est d'avoir un ViewController différent pour chaque élément de menu mais je n'arrive pas à trouver un solution pour faire ça...
Quelqu'un l'aurait déjà utilisé ?
Bon sauf qu'il me semble que les "Class" ne sont pas des NSObject, donc que tu ne peux pas les mettre dans un NSArray (une Class n'a pas de méthode retain, release, et tout, ce sont des métadonnées), c'est pour ça que dans ce genre de cas on passe par NSStringFromClass et NSClassFromString.
Pour éviter le crash tu peux simplement faire :
Merci à tous
J'ai commencé avec les property lists mais, maintenant ma structure de données s'étant complexifiée un peu, c'est un peu lourd de convertir tous ses objets en NSString, NSNumber, etc... pour les faire rentrer dans le pList.
Il existe un moyen pour sauvegarder des objets tels quels dans un fichier sans avoir à les convertir en types simples?
c'est pour le même projet...
Là c'est une autre question, une question générique qui plus est, à savoir comment sauvegarder une hiérarchie d'objets. Ca n'a rien à voir avec le titre "De nombreux ViewControllers" et le fait que tu aies plusieurs VC dans ton projet.
S'il y a d'autres gens qui recherchent comment sauvegarder des grosses structures dans un fichier, ils ne vont jamais aller ouvrir un sujet intitulé "De nombreux View Controllers" pour trouver la réponse. S'ils font une recherche pour espérer trouver une réponse si quelqu'un a déjà posé la question, ils ne tomberont jamais sur ce sujet. Pense un peu communautaire /wink.png' class='bbc_emoticon' alt=';)' />
D'ailleurs si tu avais déjà ce réflexe... tu aurais toi-même fait une recherche sur le sujet, car il me semble qu'on a justement déjà répondu à ce genre de question de comment sauvegarder une hiérarchie d'objets dans un fichier...