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];