2010-10-31 22 views
0

J'ai un problème que je pense est probablement simple, mais je ne peux pas sembler envelopper ma tête autour d'elle.Sélection dynamique de différents viewControllers

J'ai une tableview qui charge à partir d'un tableau de NSDictionaries. Chaque dictionnaire a un titre (indiqué dans la rangée) et une chaîne nss associée représentant un contrôleur de vue qui doit être poussé sur la pile lorsque la ligne est sélectionnée. En d'autres termes, sélectionner la ligne "A" doit initialiser une instance de "aViewController" et la pousser sur la pile, sélectionner la ligne "B" pour initialiser une instance de "bViewController" et la pousser sur la pile, etc.

À l'origine, j'ai simplement codé en dur toutes les valeurs possibles dans didSelectRow. Mais j'aimerais vraiment pouvoir générer dynamiquement viewController. J'ai trouvé quelques exemples C++ de problèmes similaires qui m'ont conduit au code ci-dessous. Mais je n'arrive pas à bien faire les choses et je ne suis pas sûr d'être sur la bonne voie pour trouver une solution objective-c. Quelqu'un a des pensées?

Voici le code didSelectRow qui ne fonctionne pas:

Class cls = [selectedRow valueForKey:@"viewController"]; 
if (cls!= nil) 
{ 
id myNewController = [[cls alloc] init];  
} 


[[self navigationController] pushViewController:myNewController animated:YES]; 
[myController release]; 

Répondre

7

Entreposez-vous la classe réelle ou le nom de classe (comme NSString) dans le dictionnaire?

Si la valeur que vous stockez dans le dictionnaire est un NSString, je ne pense pas que vous pouvez simplement assigner Class cls = someNSString;

Vous pouvez cependant faire:

NSString *controllerClassName = [selectedRow valueForKey:@"viewController"]; 
if (controllerClassName != nil) { 
    id myNewController = [[NSClassFromString(controllerClassName) alloc] init]; 
    [[self navigationController] pushViewController:myNewController animated:YES]; 
    [myNewController release]; 
} 

OU

Juste stocker la classe dans le dictionnaire au lieu de la représentation NSString:

+0

"NSClassFromString". Si évident, si intuitif, et pourtant si vous êtes désemparé, si difficile à trouver. Merci pour ton aide! – Martin