首先,我发现了类似的东西: 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”。我想我有些东西搞砸了我要复制的东西,什么不是以及如何正确复制它。 如果有人能指出我正确的方向,那就太好了。
答案 0 :(得分:1)
你可以试试这个:
NSMutableDictionary *destinationDictionary = (NSMutableDictionary *)CFBridgingRelease(CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFPropertyListRef)(sourceDictionary), kCFPropertyListMutableContainers));