Sto cercando di ottenere un elenco di tutte le proprietà di una classe sconosciuta e della classe di ogni proprietà. Nel momento in cui ottengo un elenco di tutte le proprietà di un oggetto (lo faccio ricorsivamente per ottenere tutte le superclassi). Mi ispiro a this postiOS ottenere la classe di proprietà
+ (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];
}
Così ora voglio la classe di ogni proprietà e lo faccio:
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]);
}
Il problema è che funziona per NSStrings o, ma non per classi personalizzate, per quel che mi ritorna nullo. Voglio creare ricorsivamente un dizionario che rappresenti un oggetto che possa avere altri oggetti all'interno e come penso debba conoscere la classe di ogni proprietà, è possibile?
L'uomo è fantastico e funziona perfettamente! Grazie per il tuo aiuto :) – Jpellat
Prego :) –