0

需要通过以下方式制作 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];

它运行得很好。为什么我的复制版本会破坏它?

4

1 回答 1

6

mutableCopy做一个的可变副本。它不会使字典中的不可变对象可变。

您需要实现——是的,实现因为它不是 API 的一部分,原因有很多——深度可变复制,如果你需要的话。

或者,如果您的字典可以表示为一个属性列表,您可以变成一个,然后使用各种选项参数来创建可变集合和/或在它未归档时离开。

于 2012-04-18T20:56:50.693 回答