2013-05-26 120 views
0

是否可以将一个对象实例赋予一个函数,并且该函数返回此实例的所有属性值?该功能应该对任何类返回所有属性值的函数

+2

注意,这样的代码通常只是坏架构的解决方法。虽然它通常用于调试或测试。 – Sulthan

+0

什么@苏尔坦说。如果此代码和其他问题的答案超出调试或纯粹的学术好奇心使用,那么您正在走向一条将产生非常困难,非常脆弱的代码库的道路。 Objective-C根本不是为这种基于内省的编程设计的。 – bbum

回答

2

工作,这是解决方案:

unsigned int numberOfAttributs; 
objc_property_t *attributes = class_copyPropertyList([obj class], &numberOfAttributes); 

for (unsigned int i = 0; i < numberOfAttributes; i++) { 

    objc_property_t attribute = attributes[i]; 
    NSString *attributeName = [NSString stringWithUTF8String: property_getName(attribute)]; 
    NSLog(@"%@", attributeName); 
    id attributeValue = [obj valueForKey:attributeName]; 
    NSLog(@"%@", attributeValue); 
} 
+0

谢谢你的帮助,我稍后会测试一下:) – user2421041

+0

为值,你可以试试: - [obj valueForKey:@“property_getName(attribute)”];试试吧,然后让我知道成功 –

+0

你可以添加一个检查并检查变量的类型! –