2013-05-26 155 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

你可以添加一個檢查並檢查變量的類型! –