Pregunta

Quiero convertir una cadena a un nombre de clase. Imagínese que tengo una cadena, que cambia, que contiene un nombre de clase, por ejemplo, el "MyExampleClass" cadena. Ahora, quiero crear un objeto de la clase MyExampleClass. Tengo que conseguir el nombre de clase de la cadena. Quiero hacer algo como lo siguiente. (Considere el código al igual que un boceto.)

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

¿Cuál es la forma correcta de hacer esto?

¿Fue útil?

Solución

Esto es lo que te gustaría:

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

Tenga en cuenta que no se puede utilizar theClass como un nombre de tipo (es decir theClass *myObject). Vas a tener que utilizar id para eso.

Otros consejos

¿Quieres NSClassFromString:

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

También puede utilizar las interfaces de tiempo de ejecución ObjC (por ejemplo objc_getClass(const char* name), objc_lookUpClass(const char* name)). El primero no se carga una clase. La última voluntad. Esa opción podría ser una buena cosa en algunos casos.

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

utilizar éste esto le dará lo que quiere.

Si usted está tratando de construir sus clases de forma dinámica, te recomiendo que mejor echar un vistazo al patrón de diseño método de fábrica, de lo contrario se le perdiendo la pista de quién construye qué y cómo.

Para ello, se puede codificar una clase que recibe una cadena y devuelve una clase dependiendo de la cadena de entrada.

Tome un vistazo al libro "Design Patterns: Elements of reutilizable Software Orientado a Objetos" por Erich Gamma; Richard timón; Ralph Johnson; John Vlissides.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top