2013-07-23 75 views
0

假設(爲了爭辯),我在我的iOS項目中有一個包含一些處理的類。如何在Objective-C的運行時將動態屬性添加到對象?

我想知道是否可以在運行時將動態屬性添加到Objective C對象?

我需要動態創建一個NSDictionnary實例中的對象,它沒有固定的鍵值模式& vals。並且要以通用方式創建對象,我需要NSDictionnary的Key用於屬性名稱,Val用於屬性值。

-(NSMutableArray *) getFromJSON:(NSString *)json 
{ 
JSONDecoder *decoder = [[JSONDecoder alloc] init]; 
NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding]; 
NSArray *array = [decoder objectWithData:jsonData]; 
NSMutableArray *data = [[NSMutableArray alloc] initWithArray:array]; 
for (int i = 0; i < [data count]; i++) { 
    NSDictionary *modelData = [data objectAtIndex:i]; 
    // .... Object attributes creation goes here 

在這條線,我需要從這個DIC(modelData)與必須對應於我們的DIC的鍵屬性名的對象來創建。創建的對象(虛擬類)的屬性將爲:

@property (nonatomic, strong) key0; 
@property (nonatomic, strong) key1; 
@property (nonatomic, strong) key2; 

..等等。那可能嗎 ?

我創建了ModelManager和不同的模型子類,它們從ModelManager類繼承了一些特定的動作。在ModelManager類中,我必須做一個泛型方法,創建一個NSMuttableArray,其中包含NSObject的列表。從Json請求中提取數據。每個Json請求都會返回特定於一個Model的數據。我正在尋找如何以通用的方式在子類中繼承此方法,並將該動態對象轉換爲子類的類型。我發現的唯一通用方法是創建一個具有創建屬性的虛擬類從json數據鍵,然後將此NSObject轉換爲Model子類。

+0

張貼一些代碼。 –

+2

那麼,剛使用'NSMutableDictionary'有什麼問題? – trojanfoe

+0

轉到此[鏈接](http://stackoverflow.com/questions/7819092/how-can-i-add-properties-to-an-object-at-runtime) 這可能會幫助你。 – Suryakant

回答

0

只需將其聲明爲屬性即可。

@property (nonatomic, strong) NSDictionary * dic; 

@property (nonatomic, strong) NSMutableDictionary * dic; 

再後來在運行時創建它,你想要的方式。

self.dic = @{randomKey : randomValue}; 

self.dic = [@{randomKey : randomValue} mutableCopy]; 
相關問題