从 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