请帮助解决双重NSMutableArray问题

时间:2015-08-13 16:23:42

标签: ios objective-c nsmutablearray

我在NSMutableArray上发现了一个非常奇怪的问题。首先,我创建1 NSMutableArrayarrA)并向其添加对象。然后我创建了另一个NSMutableArrayarrB)。

然后我将arrA添加到arrB。最后,当我更新arrB内的数据时,arrA也会更新。代码如下

[arrA addObjectsFromArray:dataBack];

[arrB removeAllObjects];
[arrB addObjectsFromArray:arrA];

在此for循环后,我发现数据arrA更改为arrB

for (int i = arrB.count-1; i >= 0; i--) {
    if (itemExLong > 0 && [[[arrB objectAtIndex:i] objectForKey:@"IM_QtyPriceEx"] doubleValue] > itemExLong)
    {
        itemExLong = [[[arrB objectAtIndex:i] objectForKey:@"IM_QtyPriceEx"] doubleValue] + itemExLong;
        itemTaxLong = [[[arrB objectAtIndex:i] objectForKey:@"IM_QtyTax"] doubleValue] - itemTaxLong;
        data = [arrB objectAtIndex:i];
        [data setValue:[NSString stringWithFormat:@"%0.2f",itemExLong] forKey:@"IM_PriceEx"];
        [data setValue:[NSString stringWithFormat:@"%0.2f",itemTaxLong] forKey:@"IM_QtyTax"];

        [arrB replaceObjectAtIndex:i withObject:data];
        break;
    }
} 

当我replaceObjectAtIndex时,我发现arrA数据发生了变化。请帮助。

1 个答案:

答案 0 :(得分:2)

两个数组都包含指向相同底层对象的指针。因此,如果您将使用任何数组中的指针更改对象,它将更改对象(而不是指针),并且该对象对于两个数组都是相同的。 如果要保留对象的不同副本,请在操作之前复制对象。

如果您有自定义类,则可以通过实施NSCopying协议添加复制功能,以了解有关NSCopying的更多信息