2013-03-15 61 views
2

我尝试一些NSMutableDictionaries存储到NSMutableArray扔一个循环:NSMutableArray里没有存储数据正确地进入循环

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"; 
    } 
) 

回答

6

你正在将相同的字典添加到数组中;使用此相反,它分配一个新的字典每次迭代:

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,否则你会泄漏词典右侧,左侧和中心...