NSMutableArray addOject重写数据

时间:2013-09-11 14:09:53

标签: iphone ios objective-c

我知道基于同一主题有很多问题。但似乎没有人解决我的问题。

我有NSMutableArray _buttonArrayNSMutableDictionary _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;
}

现在,如果我添加文字“xyz”,它会给我:

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

我在viewDidLoad

中完成了数组和字典的分配

1 个答案:

答案 0 :(得分:5)

这不是对先前添加的对象的覆盖 - 您认为这是因为您已经两次添加对同一对象的引用。您的NSMutableArray看起来像这样:

[_singleBtn, _singleBtn]

NSMutableArray不会复制您插入的对象,因此在插入新对象之前需要注意这些对象。

制作副本的一种方法是将_singleBtn传递给将其复制到新字典中的方法,如下所示:

[_buttonArray addObject:[NSMutableDictionary dictionaryWithDictionary:_singleBtn]];