Próbuję uzyskać listę wszystkich właściwości nieznanej klasy i klasy każdej własności. W tym momencie otrzymuję listę wszystkich właściwości obiektu (robię to rekurencyjnie, aby uzyskać wszystkie superklasy). I inspirowane w this postiOS get property class
+ (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];
}
Więc teraz chcę klasę każdej nieruchomości i robię:
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]);
}
Problemem jest to, że pracuje dla NSStrings lub ale nie dla klas niestandardowych, na które zwraca mnie zero. Chcę rekurencyjnie utworzyć słownik, który reprezentuje obiekt, który może mieć inne obiekty wewnątrz i jak myślę, że muszę znać klasę każdej własności, czy to możliwe?
Człowiek, który jest niesamowity i działa idealnie! Dzięki za pomoc :) – Jpellat
Nie ma za co :) –