gpt4 book ai didi

objective-c - 复制的 NSMutableDictionary 不可变

转载 作者:行者123 更新时间:2023-11-28 18:25:36 25 4
gpt4 key购买 nike

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

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

最佳答案

mutableCopy 执行 可变复制。它不会使字典中的不可变对象(immutable对象)可变。

您需要实现——是的,实现,因为出于各种原因它不是 API 的一部分——深度可变复制,如果您需要的话。

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

关于objective-c - 复制的 NSMutableDictionary 不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10217784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com