NSMutableArray更改为副本导致在父NSMutableArray更改以及

我有一个NSMutableArray是我在我的一个视图控制器中使用的委托。

所以在viewDidLoad我做这样的我的NSMutableArray的可变副本

@implementation ItemsViewController{ AppDelegate *mydelegate; NSMutableArray* allItems; } 

在viewDidLoad中

 allItems = [mydelegate.array mutableCopy]; 

现在,无论我在所有项目MutableArray中所做的更改也会导致mydelegate.array中的更改。 难道我做错了什么?

另外我在委托arrays定义如下

 @property (nonatomic, strong) NSMutableArray *array; 

你应该做一个深层复制,我使用这个完美的作品,由Sherm Pendley†制作 。

我假设你没有实现mutableCopyWithZone:正确。

你需要为你放在数组中的对象实现NSMutableCopying协议,这样你就可以传递这个对象的一个​​新的实例。

 - (id)mutableCopyWithZone:(NSZone *)zone { YourCustomModel *aCopy = [[[self class] allocWithZone:zone] init]; if (aCopy) { // set properties } return aCopy } 

这是因为数组的可变副本引用与mydelegate.array引用的对象相同的对象,所以如果更改了一个对象属性,则两个数组中的对象属性都会更改,因为它们是同一个对象。

你可以在你的对象中实现NSCopying协议,然后你可以调用initWithArray:copyItems:NSArray方法。

希望有所帮助。

尝试这个。

 allitems =[NSMutableArray arrayWithArray:mydelegate.array];