我有oldArray,它由许多小数组组成。 现在我想采取其中一个对象(一个小数组),修改它,然后(如果用户点击一个按钮)替换它。 要做到这一点:
第1步 - 我创建了一个新数组,我用这个小对象初始化了newArray。
openedCartProduct = nil;
openedCartProduct = [NSMutableArray array];
[openedCartProduct addObjectsFromArray: [SharedAppDelegate.myEngine.shoppingCart objectAtIndex:indexPath.row]];
第2步 - 修改数组。
[[openedCartProduct objectAtIndex:0] setObject:[NSNumber numberWithFloat:[inputRabatLabel.text floatValue]] forKey:kRABAT_KEY];
第3步 - 替换oldArray中的对象。
在步骤2中,甚至在替换对象之前,修改也发生在oldArray中。我在这里错过了什么吗?
先谢谢你们! :)
修改 修改的对象是一个小数组,由我正在修改的索引为0的NSMutableDictionary组成。
修改 好像我们需要一个DEEP COPY。我找到了一个解决方案,但它是一个黑客,但工作正常,而且很简单:
openedCartProduct = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:[SharedAppDelegate.myEngine.shoppingCart objectAtIndex:indexPath.row]]];
答案 0 :(得分:1)
您正在复制对原始小数组的引用。因此,当您更改它时,它指向第一个数组中的小数组。它包含所有原始内容。如果你想改变它而不在第一个数组中更改它,你需要执行一个副本,在这种情况下是一个深拷贝,因为它包含一个mutableDictionary(我假设你也想复制)。