iOS:将对象从oldArray复制到newArray

时间:2013-07-17 12:49:21

标签: ios replace copy nsmutablearray

我有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]]];

1 个答案:

答案 0 :(得分:1)

您正在复制对原始小数组的引用。因此,当您更改它时,它指向第一个数组中的小数组。它包含所有原始内容。如果你想改变它而不在第一个数组中更改它,你需要执行一个副本,在这种情况下是一个深拷贝,因为它包含一个mutableDictionary(我假设你也想复制)。