需要通过以下方式复制NSMutableDictionary:
NSMutableDictionary *newScoutingEventDictionary = [[[NSMutableDictionary alloc] initWithDictionary:self.scoutingEvent copyItems:YES] mutableCopy];
但是当我尝试改变其中的数组时:
[[newScoutingEventDictionary objectForKey:@"myArray"] replaceObjectAtIndex:i withObject:appendedEntry];
它给了我一个错误:
-[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0x964d650
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0x964d650'
如果我试图改变原始的NSMutableDictionary:
[[self.scoutingEvent objectForKey:@"myArray"] replaceObjectAtIndex:i withObject:appendedEntry];
它运行得很好。为什么我的复制版本打破了它?
答案 0 :(得分:6)
mutableCopy
执行浅可变副本。它不会使字典中的不可变对象变得可变。
你需要实现 - 是的,实现,因为它不是API的一部分,原因有很多 - 深度可变复制,如果这是你需要的。
或者,如果您的字典可以表示为属性列表,则可以将其转换为一个,然后使用各种选项参数在未归档时生成可变集合和/或离开。