从NSMutableDictionary中删除对象

时间:2014-04-04 22:15:15

标签: ios objective-c nsdictionary nsmutabledictionary

我有一个名为tableData的NSDictionary,它包含键@“A” - @“Z”,对于每个键,该值包含一个带有Patient对象的数组。

然后,我创建一个名为filteredPatients的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];
}

在这种情况下,使用键@“A”正确地从filteredPatients数组中删除Patient Objects,但问题在于使用键@“A”从tableData数组中删除相同的Patient Objects。我的问题是为什么还要从tableData字典中删除Patient Objects?我该如何防止这种情况?

我一定做错了什么,但这让我感到困惑,因为如果我尝试简单地从filteredPatients中删除密钥@“A”,它的工作完全正常,只能从我想要的字典中删除密钥。

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

1 个答案:

答案 0 :(得分:2)

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