2009-10-06 4 views
0

J'ai un objet NSMutableArray dans Objective C. Je le remplis en fonction du contenu d'un fichier de données, qui contient la classe que chaque élément devrait être et une liste de paramètres. Toutes les classes possibles héritent d'une classe parente commune.Instancier une classe arbitraire dans Objective C

Est-il possible d'instancier chaque élément de la matrice sans coder en dur chacune des classes possibles dans un test if-else massif?

Répondre

7

Vous stockez actuellement le nom de la classe dans le fichier de données ainsi que les paramètres de l'objet.

Vous pouvez donc utiliser NSClassFromString instancier cet objet de classe personnalisée et initialiser son état:

NSString *_myCustomClass = // get custom class name from data file... 
id _myCustomObject = [[NSClassFromString(_myCustomClass) alloc] init]; 
// set up _myCustomObject's state from data file's parameters... 
[_myMutableArray addObject:_myCustomObject]; 
[_myCustomObject release]; 
+0

+1 point sur la réponse. Est-il utile de mentionner comment vous obtiendriez le sélecteur pour une propriété particulière (par nom?) Afin de définir sa valeur? –

+0

@Rob - si les propriétés ont été déclarées en utilisant '@ property', alors la réponse la plus simple serait d'utiliser' setValue: forKey: '. –

+0

Même si les propriétés n'ont pas été déclarées en utilisant '@ property', vous pouvez toujours utiliser' setValue: forKey: 'Key-Value codage a précédé les déclarations' @ property' de Objective-C 2.0 et recherche les setters correctement nommés par l'assignation directe d'ivar. –

-2

Oui, je suppose que memset() sera d'aide

-1

Si vous êtes dans le contrôle de l'écriture de ce fichier de données aussi, vous trouverez peut-être plus facile à utiliser juste objectif norme C archiving (appelé sérialisation dans d'autres langues). C'est un moyen facile d'écrire et de lire des objets dans et depuis un fichier.

Questions connexes