将NSMutableArray中的对象放入另一个数组中无法正常工作

时间:2011-05-22 19:22:25

标签: iphone objective-c nsmutablearray

我有这段代码:

secondArray = [firstArray objectAtIndex:1];

索引1处的对象已经是[firstArray]内的NSMutableArray。问题是,当我更改secondArray时,firstArray也会发生变化。

我该怎么办?

2 个答案:

答案 0 :(得分:5)

您需要按照以下代码执行某些操作:

NSMutableArray *secondArray = [[NSMutableArray alloc] initWithArray: [firstArray objectAtIndex:1] copyItems:YES];

这将创建一个新数组,并将第一个数组中的每个项目复制到新创建的数组中,而不是保留它们,就像代码中的情况一样。

但有一点需要注意:第一个数组中的所有对象都需要符合NSCopying协议才能生效。

答案 1 :(得分:3)

阻止它改变的最好方法是复制数组而不是设置它。我之前遇到过这个问题,这就是我的诀窍

编辑:这样我就不会给你不好的信息,我会把它改成更通用的版本:

NSMutableArray *secondArray = [NSMutableArray alloc] initWithCapacity:[[firstArray objectAtIndex:1] count];
[secondArray addObjectsFromArray:[firstArray objectAtIndex:1]];

这应该更适合您的情况。我已经测试了两次以确保通过创建数组并克隆它们,然后修改克隆以查看它们是唯一被修改的对象