2013-09-11 6 views
1

Я знаю, что есть много вопросов, основанных на той же теме. Но никто, кажется, не решает мою проблему.NSMutableArray addOject перезаписывает данные

У меня есть NSMutableArray_buttonArray и a NSMutableDictionary_singleBtn.

Когда я нажимаю кнопку, я добавляю словарь в массив. Но массив переписывается.

[_singleBtn setObject:scanBarCodeButton.titleLabel.text forKey:@"text"]; 
[_singleBtn setObject:NSStringFromCGRect(scanBarCodeButton.frame) forKey:@"frame"]; 
[_buttonArray addObject:_singleBtn]; 

В первой итерации, я получаю следующее:

{ 
    frame = "{{20, 40}, {50, 40}}"; 
    text = abc; 
} 

Теперь, если добавить текст "АБВ", это дает мне:

{ 
    frame = "{{20, 90}, {80, 40}}"; 
    text = xyz; 
}, 
    { 
    frame = "{{20, 90}, {80, 40}}"; 
    text = xyz; 
} 

Я сделал выделение как массива, так и словаря в моем viewDidLoad

+0

попробовать [_buttonArray AddObject: [_ singleBtn копия]]; –

ответ

5

Это не переписывание ранее добавленного ob ject - причина, по которой вы видите это, состоит в том, что вы добавили ссылку на один и тот же объект два раза. Ваш NSMutableArray выглядит следующим образом:

[_singleBtn, _singleBtn] 

NSMutableArray не делает копии объектов, которые вы вставляете, так что вам нужно позаботиться о создании новых объектов, прежде чем вставлять их.

Один из способов сделать копию проходит _singleBtn методу, который копирует его в новый словарь, как это:

[_buttonArray addObject:[NSMutableDictionary dictionaryWithDictionary:_singleBtn]]; 
Смежные вопросы