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の一部ではないため実装します-それが必要な場合は、深い可変コピーです。

または、ディクショナリをプロパティ リストとして表すことができる場合は、1 つに変換してから、さまざまなオプション パラメータを使用して、変更可能なコレクションを作成したり、アーカイブを解除したときにリーフを作成したりできます。

于 2012-04-18T20:56:50.693 に答える