2013-03-15 43 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,否則你會泄漏詞典右側,左側和中心...