Question

Je veux convertir une chaîne en un nom de classe. Imaginez que j'ai une chaîne, qui change, contenant un nom de classe, par exemple, la chaîne "MyExampleClass". Maintenant, je veux créer un objet de la MyExampleClass de classe. Je dois obtenir le nom de la classe de la chaîne. Je veux faire quelque chose comme ce qui suit. (Considérez le code comme un croquis.)

NSString *classNameStr = "MyExampleClass";
id theClass = [UIClass classFromString:classNameStr];
theClass *myObject = [[theClass alloc] init];

Quelle est la bonne façon de le faire?

Était-ce utile?

La solution

Voici ce que vous voulez:

Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];

Notez que vous ne pouvez pas utiliser theClass comme un nom de type (à savoir theClass *myObject). Vous devrez utiliser id pour cela.

Autres conseils

Vous voulez NSClassFromString:

NSString *classNameStr = @"MyExampleClass";
Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];

Vous pouvez également utiliser les interfaces d'exécution ObjC (par exemple objc_getClass(const char* name), objc_lookUpClass(const char* name)). L'ancien ne se charge pas une classe. Ce dernier se chargera. Cette option pourrait être une bonne chose dans certains cas.

id a = [[NSClassFromString(@"MyExampleClass") alloc] init];

utiliser celui-ci, cela vous donnera ce que vous voulez.

Si vous essayez de construire dynamiquement vos classes, je vous recommande de mieux jeter un oeil à la configuration de la conception de la méthode d'usine, sinon vous serez desserrez de savoir qui construit quoi et comment.

Pour ce faire, vous pouvez coder une classe qui reçoit une chaîne et retourne une classe en fonction de la chaîne d'entrée.

Jetez un coup d'oeil au livre « Design Patterns: Elements de logiciel orienté objet réutilisable » par Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top