NSMutableArray没有正确地将数据存储到循环中
我尝试将一些NSMutableDictionaries
存储到NSMutableArray
抛出for循环:
NSMutableArray *productsIdAndQuantities = [[NSMutableArray alloc]init]; NSMutableDictionary *element = [[NSMutableDictionary alloc]init]; for (id object in shoppingArray) { [element setObject:[object valueForKey:@"proId"] forKey:@"id"]; [element setObject:[object valueForKey:@"qty"] forKey:@"quantity"]; NSLog(@"%@",element);//tested, it's different on every iteration [productsIdAndQuantities addObject:element]; }
循环结束后,我尝试调试productsIdAndQuantities
,刚出来它包含上面循环的项目的确切数量,但是有一个值。
这就是我的意思:
循环内部( NSLog(@"%@",element);
):
{ id = 13293; quantity = "-2"; } { id = 12632; quantity = "-5"; }
循环之后( NSLog(@"%@",productsIdAndQuantities);
相同值!!!!!):
( { id = 12632; quantity = "-5"; }, { id = 12632; quantity = "-5"; } )
您正在将相同的字典添加到数组中; 改为使用它,每次迭代都会分配一个新的字典:
NSMutableArray *productsIdAndQuantities = [[NSMutableArray alloc]init]; for (id object in shoppingArray) { NSMutableDictionary *element = [[NSMutableDictionary alloc]init]; [element setObject:[object valueForKey:@"proId"] forKey:@"id"]; [element setObject:[object valueForKey:@"qty"] forKey:@"quantity"]; NSLog(@"%@",element);//tested, it's different on every iteration [productsIdAndQuantities addObject:element]; }
注意:这假设您正在使用ARC,否则您将向右,左和中心泄漏词典…