нужно сделать копию 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];' фактически делает две копии, первая из которых просочилась ... –
er ... . как так? я не вижу/не понимаю. – Padin215
Чтобы быть точным, он создает два новых экземпляра из [основных правил управления памятью] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#// apple_ref/doc/uid/20000994-BAJHFBGH), «alloc» означает, что создается один экземпляр, а «mutableCopy» - второй. –