从 NSMutableDictionary 中删除对象

Posted

技术标签:

【中文标题】从 NSMutableDictionary 中删除对象【英文标题】:Removing Objects from NSMutableDictionary 【发布时间】:2014-04-04 22:15:14 【问题描述】:

我有一个名为 tableData 的 NSDictionary,其中包含键 @"A" - @"Z",并且每个键的值都包含一个包含 Patient 对象的数组。

然后我创建了一个名为 filtersPatients 的 NSMutableDictionary 并使用 tableData 字典对其进行初始化。

在此示例中,我尝试从键为 @"A" 的数组中删除所有 Patient 对象

@property (nonatomic, strong) NSDictionary *tableData;
@property (nonatomic, strong) NSMutableDictionary *filteredPatients;

self.filteredPatients = [[NSMutableDictionary alloc]initWithDictionary:self.tableData];

NSMutableArray *patientArray = [self.filteredPatients objectForKey:@"A"];
int count = patientArray.count - 1;

for (int i = count; i >= 0; i--)

    [patientArray removeObjectAtIndex:i];

在这种情况下,Patient 对象正在从带有键 @"A" 的过滤的Patients 数组中正确删除,但问题在于相同的 Patient 对象正在从带有键 @"A" 的 tableData 数组中删除。我的问题是为什么患者对象也从 tableData 字典中删除?如何防止这种情况发生?

我一定是做错了什么,但这让我感到困惑,因为如果我尝试简单地从 filtersPatients 中删除键 @"A",它工作得非常好,并且只会从我想要的字典中删除键。

[self.filteredPatients removeObjectForKey:@"A"];

【问题讨论】:

【参考方案1】:

我认为您的问题是您期待深拷贝行为,但您没有要求深拷贝。字典是不同的对象,但是两个字典中任何给定键的值都指向相同的可变数组。您可以改用initWithDictionary:self.tableData copyItems:YES,但您需要考虑哪些内容会被复制,哪些内容不会。我没有足够的信息来帮助你。

【讨论】:

解决了,你说得对,我想要一个深拷贝。非常感谢!

以上是关于从 NSMutableDictionary 中删除对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从 nsmutabledictionary 中删除键当该键的值在 ios 中为空或 null 时?

通过 UITableView 从 NSMutableDictionary 添加/删除项目

如何从两个 plist 中添加 NSMutableDictionary 中的信息?

从一个类访问和更改 NSMutableDictionary 的值到另一个 iOS

从 NSMutableDictionary 构建 NSMutableArray 导致 NSException

从 plist 读取字典后无法编辑字典