Ios 将NSDictionary添加到数组

Ios 将NSDictionary添加到数组,ios,objective-c,for-loop,Ios,Objective C,For Loop,我不确定我遗漏了什么,但我有下面这个for循环。当我循环遍历它时,dictionary对象会像每次一样添加到数组中。但出于某种原因,下次循环时,它会用当前正在循环的字典值完全替换所有字典对象值。例如,当循环完成时,我的数组中有5个dictionary对象,它们都有最新的循环值 NSMutableArray *events = [NSMutableArray array]; NSMutableDictionary *event = [[NSMutableDictionary alloc]init]

我不确定我遗漏了什么,但我有下面这个for循环。当我循环遍历它时,dictionary对象会像每次一样添加到数组中。但出于某种原因,下次循环时,它会用当前正在循环的字典值完全替换所有字典对象值。例如,当循环完成时,我的数组中有5个dictionary对象,它们都有最新的循环值

NSMutableArray *events = [NSMutableArray array];
NSMutableDictionary *event = [[NSMutableDictionary alloc]init];
NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Update"]];

for (int i = 0; i < [array count]; i = i + 2){

    [event setValue:[array objectAtIndex:i+1] forKey:@"Event-Type"];
    [event setValue:[array objectAtIndex:i] forKey:@"date"];
    [events addObject:event];

}
NSMutableArray*事件=[NSMutableArray];
NSMutableDictionary*事件=[[NSMutableDictionary alloc]init];
NSMutableArray*array=[NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@“Update”];
对于(int i=0;i<[数组计数];i=i+2){
[event setValue:[array objectAtIndex:i+1]forKey:@“事件类型”];
[event setValue:[array objectAtIndex:i]forKey:@“date”];
[events addObject:event];
}

您必须在循环的每个迭代中分配一个新的
NSMutableDictionary
,或者在每个循环的开始处(即,将该行移动到循环中),或者在添加对象时,您可以使用
[NSDictionary dictionary WithDictionary:event]复制字典

这是因为NSMutableDictionary是一个对象;它是通过引用传递的。因此,您只需将相同的NSMUtableDictionary实例放入数组n次


您可以通过在末尾将对象记录在数组的每个索引处来查看这一点,并且可以检查内存地址以查看它们是否完全相同。

目标C过程引用中的数组,而不是副本。因此,当您调用[events addObject:event]并稍后写入同一事件时,它会被写入并新添加。只需将字典的创建移到for循环中,您就可以开始了。

您需要
alloc init
将字典移到循环中,并注意按照苹果标准添加的内容。如果您正在使用字典,请始终使用
setObject:forKey:
。请参阅以下代码:-

NSMutableArray *events = [NSMutableArray array];
NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"Update"]];

for (int i = 0; i < [array count]; i = i + 2){
    NSMutableDictionary *event = [[NSMutableDictionary alloc]init];
    [event setObject:[array objectAtIndex:i+1] forKey:@"Event-Type"];
    [event setObject:[array objectAtIndex:i] forKey:@"date"];
    [events addObject:event];
}
NSMutableArray*事件=[NSMutableArray];
NSMutableArray*array=[NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@“Update”];
对于(int i=0;i<[数组计数];i=i+2){
NSMutableDictionary*事件=[[NSMutableDictionary alloc]init];
[event setObject:[array objectAtIndex:i+1]forKey:@“事件类型”];
[event setObject:[array objectAtIndex:i]forKey:@“date”];
[events addObject:event];
}

非常感谢,我知道这很简单。