2013-03-20 111 views
0

首先我發現了類似的東西: deep mutable copy of a NSMutableDictionary 但它並沒有解決我的問題。可變的NSMutableDictionary深層副本

我有一個NSMutableDictionary作爲模板。

NSMutableDictionary *mutableDictionaryTemplate = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"obj1, @"key1",@"obj2, @"key2",nil]; 

現在我想複製這個字典,然後改變一些部分,然後保存在一個NSMutable數組。

NSMutableArray *savedIterations = [NSMutableArray new]; 

//some loop that normally would change the objects added 
int i=0; 
for (i < 5){ 

    NSMutableDictionary *copiedDictionary = [mutableDictionaryTemplate copy]; 
    [copiedDictionary setObject:@"obj3" forKey:@"key3"]; 
    [savedIterations addObject:copiedDictionary]; 

    i++; 
} 

我的問題是,一旦我複製NSMutableDictionary「mutableDictionaryTemplate」它不再是可變的。但我需要複製它,否則我將在我的NSMutableArray「savedIterations」的每個索引處都有相同的NSMutableDictionary(至少我認爲是這樣)。我也嘗試了可變副本,但是當我更改「copiedDictionary」時,我更改了「mutableDictionaryTemplate」。我認爲我有些東西搞亂了我必須複製的東西,不知道如何正確複製它。 如果有人能指引我走向正確的方向,那將會很棒。

回答

1

你可以試試這個:

NSMutableDictionary *destinationDictionary = (NSMutableDictionary *)CFBridgingRelease(CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFPropertyListRef)(sourceDictionary), kCFPropertyListMutableContainers));