我有一个包含一些 TextFields 的 TableView。所述 TextFields 的值链接到二维数组(NSMutableArrays 的 NSArray)中的某些位置。
一个初始的干净数组定义如下:
self.cleanEditContents = @[
[@[@-1,@-1] mutableCopy],
[@[@0,@80] mutableCopy],
[@[@0,@500] mutableCopy],
[@[@-1,@-1] mutableCopy],
[@[@-1,@-1] mutableCopy],
[@[@-1,@-1] mutableCopy],
[@[@-1,@-1] mutableCopy],
[@[@-1,@-1] mutableCopy],
[@[@-1,@-1] mutableCopy],
[@[@-1,@-1] mutableCopy],
[@[@-1,@-1] mutableCopy],
[@[@-1,@-1] mutableCopy]
];
该阵列应该与“事件”阵列分开,以便可以在按下按钮时重置事件阵列。
我使用 self.editContents = [self.cleanEditContents copy];
在填充干净数组后和按下按钮时直接设置事件数组。
有一个问题,即使我重置数组并调用 reloadData 和 setNeedsLayout(可能是矫枉过正?可能),数字也不会重置。我尝试在两个数组中输出相同位置的值,结果发现对事件数组所做的任何更改都会污染干净的数组。
最佳答案
copy
进行浅拷贝。换句话说,self.editContents
和 self.cleanEditContents
都引用同一组可变数组。因此,如果您在一个中更新可变数组,则更改会在另一个中看到。
要创建 self.editContents
,请使用内部数组的可变副本创建一个新数组。
NSMutableArray *tmp = [NSMutableArray array];
for (NSArray *array in self.cleanEditContents) {
[tmp addObject:[array mutableCopy]];
}
self.editContents = tmp;
关于ios - 据说通过编辑副本将被污染的 NSArray 分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27785572/