2013-03-15 2 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, иначе вы будете течь словарей прямо, левый и центральный ...

Смежные вопросы