需要通过做出的NSMutableDictionary的副本:已复制的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];
它运行得很好。为什么我的复制版本会破坏它?
我应该指出'NSMutableDictionary * newScoutingEventDictionary = [[[[[NSMutableDictionary alloc] initWithDictionary:self.scoutingEvent copyItems:YES] mutableCopy];'实际上制作了两个副本,其中第一个被泄露... – 2012-04-18 20:58:16
er ... 。 怎么会这样?我没有看到/理解它。 – Padin215 2012-04-19 15:44:12
准确地说,它会根据[基本内存管理规则](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//)创建两个新实例apple_ref/doc/uid/20000994-BAJHFBGH),“alloc”表示一个实例被创建,而“mutableCopy”表示另一个实例。 – 2012-04-21 22:32:57