Estoy tratando de obtener una lista de todas las propiedades de una clase desconocida y la clase de cada propiedad. En el momento en que obtengo una lista de todas las propiedades de un objeto (lo hago de forma recursiva para obtener todas las superclases). Me inspiré en this postiOS obtener clase de propiedad
+ (NSArray *)classPropsFor:(Class)klass
{
NSLog(@"Properties for class:%@", klass);
if (klass == NULL || klass == [NSObject class]) {
return nil;
}
NSMutableArray *results = [[NSMutableArray alloc] init];
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(klass, &outCount);
for (i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
const char *propName = property_getName(property);
if(propName) {
NSString *propertyName = [NSString stringWithUTF8String:propName];
[results addObject:propertyName];
}
NSArray* dict = [self classPropsFor:[klass superclass]];
[results addObjectsFromArray:dict];
}
free(properties);
return [NSArray arrayWithArray:results];
}
Así que ahora quiero la clase de cada propiedad y lo hago:
NSArray* properties = [PropertyUtil classPropsFor:[self class]];
for (NSString* property in properties) {
id value= [self valueForKey:property];
NSLog(@"Value class for key: %@ is %@", property, [value class]);
}
El problema es que funciona para NSStrings o pero no para clases personalizadas, para que me vuelve nulo. Quiero crear de forma recursiva un diccionario que represente un objeto que pueda tener otros objetos dentro y, como creo que necesito saber la clase de cada propiedad, ¿es posible?
¡Hombre que es increíble y funciona perfecto! Gracias por su ayuda :) – Jpellat
De nada :) –