NSMutableDictionary的可变深拷贝

时间:2013-03-20 21:47:17

标签: copy nsdictionary iteration nsmutabledictionary deep-copy

首先,我发现了类似的东西: deep mutable copy of a 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 个答案:

答案 0 :(得分:1)

你可以试试这个:

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