1

我有一个 NSMutableArray 是我的代表,我也在我的一个视图控制器中使用它。

所以在 viewDidLoad 我像这样制作我的 NSMutableArray 的可变副本

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

在 viewDidLoad

allItems = [mydelegate.array mutableCopy];

现在,我在 allItems MutableArray 中所做的任何更改也会导致 mydelegate.array 中的更改。难道我做错了什么?

我在委托中的数组也定义如下

@property (nonatomic, strong) NSMutableArray *array;
4

4 回答 4

2

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

您需要为放入数组中的对象实现 NSMutableCopying 协议,这样您就可以为这种情况传递该对象的新实例。

- (id)mutableCopyWithZone:(NSZone *)zone
{
   YourCustomModel *aCopy = [[[self class] allocWithZone:zone] init];
   if (aCopy) {
     // set properties
}
   return aCopy
}
于 2013-11-05T09:33:43.720 回答
2
于 2013-11-05T09:44:38.577 回答
0

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

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

希望有帮助。

于 2013-11-05T09:33:44.483 回答
0

尝试这个。

allitems =[NSMutableArray arrayWithArray:mydelegate.array];
于 2013-11-05T10:04:03.723 回答