NSMutableArray addObject会覆盖数据SWIFT

时间:2015-10-18 14:15:58

标签: ios swift2

我正在尝试将nsmutabledictionaries添加到我的nsmutablearray中,但是当执行addobject时,它会用new覆盖以前的数据。如果我尝试添加一个字符串它工作正常,但如果我尝试添加一个nsmutabledictionary它不能正常工作。我知道之前已经说过这个问题,但似乎我找不到快速的语言。这是我的代码:

    @IBAction func logAction(sender: UIButton) {

    let buttonRow = sender.tag
    let product_name = data2[buttonRow].name
    let product_price = data2[buttonRow].price
    let product_id = data2[buttonRow].id

    productDictionary["product_name"] = product_name
    productDictionary["price"] = product_price
    productDictionary["id"] = product_id

    let string = product_name
    productArray.addObject(productDictionary)

    print(productArray, "order ends here")

}

我将全局变量作为以下变量:

var productArray = NSMutableArray()
var productDictionary = NSMutableDictionary()

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

每次调用logAction()时,您都会更改全球 productDictionary的值。由于NSArray不会存储您添加到其中的值的副本,因此您只需将每个引用添加到全局字典中时间。如果您要坚持使用NSMutableArrayNSMutableDictionary'(请参阅我对原始帖子的评论),那么请摆脱全球productDictionary和而是每次调用logAction()时创建一个 new 。换句话说,替换

productDictionary["product_name"] = product_name
productDictionary["price"] = product_price
productDictionary["id"] = product_id
productArray.addObject(productDictionary)

var productDictionary = NSMutableDictionary() 
productDictionary["product_name"] = product_name
productDictionary["price"] = product_price
productDictionary["id"] = product_id
productArray.addObject(productDictionary)

let string = product_name做了什么?