2010-02-01 5 views
3

Question rapide pour vous. Je veux être capable de créer une instance d'un objet. Le type d'objet est basé sur une chaîne.objectif c création d'objet dynamique

En php, vous pouvez simplement remplacer le nom de la classe par une chaîne, mais je doute que ce soit si facile dans Objective c.

NSString * className; 
id theObject; 
className = @"TestObject"; 
theObject = [[className alloc] init]; 

Voici une ventilation de ce à quoi il pourrait ressembler. Je veux essayer et éviter d'utiliser une déclaration de style de cas géant.

Est-il possible d'utiliser le système de sélection pour cela?

des idées?

Vive

Répondre

6

Vous pouvez obtenir une classe par son nom en utilisant l'un des obj-c suivantes fonctions d'exécution (vous devrez peut-être en-tête importer :

id objc_lookUpClass(const char *name) 
id objc_getClass(const char *name) 

donc votre code peut ressembler à (ont pas testé si):

NSString * className = @"TestObject"; 
id theObject = nil; 
Class myClass = objc_lookUpClass([className UTF8String]); 
if (myClass) 
    theObject = [[myClass alloc] init]; 
29

Vous pouvez obtenir un objet Class dynamiquement avec NSClassFromString()

Class c = NSClassFromString(@"ClassName"); 
id obj = [[c alloc] init]; 
+0

Sans aucun doute, cette communauté est la meilleure. Je vous remercie. Cela a fonctionné comme un charme –