2

我有由许多小数组组成的 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 组成。

编辑 似乎我们需要在这里进行深度复制。我找到了一个解决方案,它是一个 hack,但工作正常,并且足够简单:

openedCartProduct = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:[SharedAppDelegate.myEngine.shoppingCart objectAtIndex:indexPath.row]]];
4

1 回答 1

1

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

于 2013-07-17T13:04:31.580 回答