将对象从NSMutableArray复制到另一个NSMutableArray

时间:2016-04-28 12:24:26

标签: ios objective-c nsmutablearray

这是我的arrayResult(NSMutableArray):

<__NSArrayM 0x7fd160e365f0>(
{
    Amount = 00;
    Carat = 00;
    Color = D;
    Cut = EX;
    Discount = 00;
    IsSelected = 1;
    Quality = IF;
    Rate = 00;
    Shape = RBC;
    StoneNo = "";
    Symme = EX;
},
{
    Amount = 00;
    Carat = 00;
    Color = D;
    Cut = EX;
    Discount = 00;
    IsSelected = 0;
    Quality = IF;
    Rate = 00;
    Shape = RBC;
    StoneNo = "";
    Symme = EX;
}
)

现在,我想将objectNSMutableArray复制到另一个NSMutableArray。 为此我用这个:

    [arrayCopyRow addObject:[arrayResult objectAtIndex:0]];

但我也存储了它的地址,所以如果我更改ValueAtIndex 0它会自动更改它object

如何防止这种情况?如何创建深层副本?

3 个答案:

答案 0 :(得分:0)

为此,您需要一份深层照片。

所以你可以先运行:

NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES];

这将根据Apples文档创建一个级别的深层副本,并且数组中的项目将需要符合NSCopying协议。

如果您只想复制一个对象,则可以使用newArray作为临时数组,然后创建并初始化一个新的可变数组,并像处理问题一样将对象移动到那里。

要确保使用上述方法将任何自定义对象复制为深层副本,您需要在每个类中添加copyWithZone:方法。

粗略的例子:

-(id) copyWithZone:(NSZone *) zone
{
    ObjectInArray *object = [super copyWithZone:zone];
    object.someValue = self.someValue;
    return object;
}

答案 1 :(得分:0)

将元素的副本放入另一个数组中。

[arrayCopyRow addObject:[[arrayResult objectAtIndex:0] copy]];

[arrayCopyRow addObject:[[arrayResult objectAtIndex:0] mutableCopy]];

如果你想要所有元素的副本,你可以像luk2302那样做一个深层复制。

答案 2 :(得分:-2)

使用此代码:

NSMutableArray *array = [yourFirstArray mutableCopy];