realizar el método de clase de protocolo en una clase creada dinámicamente

Aquí está mi situación:

Tengo un protocolo con un método de clase que analiza un NSDictionary y devuelve un objeto que realiza mi protocolo:

@protocol RCParsableObject <NSObject>
/** 
  Parses an object from an NSDictionary representation
  Return: A object created from the NSDictionary representation
 */
+(id<RCParsableObject>)parseObjectFromDictonary:(NSDictionary*)object;
@end

En una parte de mi código tengo el nombre de una clase que realiza ese protocolo en un NSString:

//dict is the dictionary I want to parse
Class class= NSClassFromString(type);
if ([class conformsToProtocol:@protocol(RCParsableObject)]) {
   //NSObject* object = [class parseObjectFromDictionary:dict];//Obviously that don't works but shows what I want     
}

Dentro del if quiero realizar el método Class del protocolo que sé que se puede realizar debido al if. ¿Como puedo hacer eso? Es un equivalente a:

NSObject * object = [class performSelector:_selector];

¿Para un objeto de clase?

preguntado el 22 de mayo de 12 a las 18:05

1 Respuestas

Así es como lo haría, excepto que querrá escribir la variable que contiene el valor de retorno como id or id<RCParsableObject>. No hay necesidad de performSelector: o algo parecido, eso es útil cuando el selector se elige dinámicamente, lo cual no es el caso aquí.

contestado el 22 de mayo de 12 a las 18:05

Lo siento, no sé si entendí bien la respuesta, así que para crear el objeto que quiero hago: id<RCParsableObject> object = [class parseObjectparseObjectFromDictonary:param]; recuerda que parseObjectparseObjectFromDictonary: es un método de clase. El compilador me dice No known class method for selector 'parseObjectparseObjectFromDictonary:' - jpellat

@Jpellat: Suponiendo que 'parseObjectparseObjectFromDictonary:' en su comentario fue un error de copiar y pegar y no de su código, ese mensaje significa la clase nombrada por type no implementa el método. Si no fue un error de copiar y pegar, entonces cometió un error tipográfico en su código (escribió "parseObjectparseObject" en lugar de solo "parseObject"), lo que también explicaría el problema. - Arrojar

XD, lo siento amigo, fue mi error. Excelente respuesta, gracias por tu ayuda! - jpellat

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.