Tôi đang cố gắng lấy danh sách tất cả các thuộc tính của một lớp không xác định và lớp của mọi thuộc tính. Bởi thời điểm này tôi nhận được một danh sách của tất cả các thuộc tính của một đối tượng (tôi làm nó đệ quy để có được tất cả các siêu lớp). Tôi lấy cảm hứng từ trong this postiOS nhận được loại tài sản
+ (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];
}
Vì vậy, bây giờ tôi muốn lớp của tất cả các tài sản và tôi làm:
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]);
}
Vấn đề là nó hoạt động cho NSStrings hay nhưng không phải cho các lớp tùy chỉnh, cho rằng nó sẽ trả về cho tôi vô giá trị. Tôi muốn đệ quy tạo một từ điển đại diện cho một đối tượng có thể có các đối tượng khác bên trong và khi tôi nghĩ rằng tôi cần phải biết lớp của mọi thuộc tính, có khả thi không?
Con người tuyệt vời và hoạt động hoàn hảo! Cảm ơn sự giúp đỡ của bạn :) – Jpellat
Bạn được chào đón :) –