我有一个NSMutableArray是我在我的一个视图控制器中使用的委托。
所以在viewDidLoad中,我像这样制作一个NSMutableArray的可变副本
@implementation ItemsViewController{
AppDelegate *mydelegate;
NSMutableArray* allItems;
}
在viewDidLoad
中allItems = [mydelegate.array mutableCopy];
现在我在allItems中做出的任何变化MutableArray也会导致我的mydelegate.array发生变化。我做错了吗?
委托中的我的数组也定义如下
@property (nonatomic, strong) NSMutableArray *array;
答案 0 :(得分:2)
我假设你没有正确实现mutableCopyWithZone。
您需要为放入数组的对象实现NSMutableCopying协议,这样就可以为该情况传递该对象的新实例。
- (id)mutableCopyWithZone:(NSZone *)zone
{
YourCustomModel *aCopy = [[[self class] allocWithZone:zone] init];
if (aCopy) {
// set properties
}
return aCopy
}
答案 1 :(得分:2)
你应该做一个deepCopy,我使用this one并完美地工作,由Sherm Pendley †制作。
答案 2 :(得分:0)
这是因为数组的可变副本引用了与mydelegate.array引用相同的对象,因此如果更改了一个对象属性,则它在两个数组中都会更改,因为它是同一个对象。
您可以在对象中实现NSCopying协议,然后可以调用initWithArray:copyItems:NSArray方法。
希望有所帮助。
答案 3 :(得分:0)
试试这个。
allitems =[NSMutableArray arrayWithArray:mydelegate.array];