2012-07-30 41 views
0

創建ID我正在使用的所有實例變量的列表如下:從伊瓦爾

Ivar *vars = class_copyIvarList([property class], &varCount); 

我的問題是如何創建從伊瓦爾一個id?即恢復NSString或NSDictionary等。

+0

的Objective-C的目的不是用這種活力的記在心裏。你想做什麼? – bbum 2012-07-30 13:54:10

回答

2

您只需使用object_getIvar()函數。 事情是這樣的:

uint varCount; 
Ivar *vars = class_copyIvarList([property class], &varCount); 

// Get the first one (out of an instance of this class) 
// Of course you could just iterate and get each one 
id var = object_getIvar(property, vars[0]); 

// Free the array when you're done 
free(vars); 
+0

這個假設伊娃是類型(id)。請注意,object_getIvar()實際上已被棄用,因爲它實際上不適用於許多類型。 – bbum 2012-07-30 13:53:53

+0

@bbum是的,這是正確的。我不知道,也看到喬納森的評論。感謝您的高舉。 – Alladinian 2012-07-30 13:58:02

2

這種方法可以簡化您的轉換代碼:

id obj = [p valueForKey:[NSString stringWithUTF8String:ivar_getName(anIvar)]]; 
... 
+2

這種方法比'object_getIvar()'方法允許更簡潔的代碼,因爲它會自動包裝其類型不是對象的ivars(例如,'int' ivar將被封裝在'NSNumber'中,'NSValue'中的'struct'等等 – 2012-07-30 12:41:31