2011-09-26 54 views
0

我已經包含某種類型(的NSDictionary)的一些對象一個NSArray實例..如何創建Objective-C中任意類型(ID)的一個實例

我需要這個陣列複製到的一些一個NSArray運行時已知類型。

所以我需要創建運行時已知類型的實例並將NSDictionary的內容複製到。

我實際上已經創建了NSObject類型的這些實例,但是在查詢後頭時,我得到了unrecognized selector錯誤!

NSUInteger count = [value count]; 
NSMutableArray* arr = [[NSMutableArray alloc]initWithCapacity:count]; 

if (count > 0) 
{ 
    for (int i=0; i < [value count]; i++) 
    { 
     id newObj = [[NSObject alloc] init]; 
     id currentValue = [value objectAtIndex:i]; 
     [self objectFromDictionary:currentValue object:newObj]; 
     [arr addObject:newObj]; 
    } 
} 

[arr release]; 

編輯: objectFromDictionary忘掉它,它做的是檢查的newObj的屬性,並通過從字典中的值設置。它的工作很好。

EDIT 2:

請參閱爲什麼我試圖做到這一點:

Type of objects inside non-parameterized arrays in JSON

+1

到底是什麼你'objectFromDictionary:對象:'應該做的事情,你應該張貼的代碼因爲分配一個NSObject通常毫無意義。 – Joe

+0

這不是NSCopying copyWithZone的用途嗎?只要你想複製的對象實現copyWithZone,它應該可以工作。如果該對象沒有實現copyWithZone,那麼就搞砸了。 –

回答

2

變化:

id newObj = [[NSObject alloc] init]; 

到:

id newObj = [[NSMutableArray alloc] init]; 

或:

id newObj = [[NSClassFromString(@"NSMutableArray") alloc] init]; 

,或者,如果你想從現有對象派生類:

id newObj = [[[existingObj class] alloc] init]; 
+0

它不是'NSMutableArray',它是運行時的一些未知類型 –

+0

然後使用我列出的其他選項。 –

+0

有什麼選擇? NSClassFromString? Idont的類型,直到我找到某種方式來檢查它在運行時 –

相關問題