ios - 据说通过编辑副本将被污染的 NSArray 分开

标签 ios objective-c arrays nsarray

我有一个包含一些 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.editContentsself.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/

相关文章:

ios - 从控制台读取行作为 Swift iOS 中 2D 数组的输入

ios - UICollection 手动加载更多单元格 Swift

ios - 如何正确地将 iAd 横幅放置在选项卡 Controller 上?

php - 如何将数据从iphone发送/存储到mysql数据库并在网页上显示结果

c++ - 数组默认与列表初始化

ios - 数组 'contains()' 检查未能检测到舍入值

objective-c - -[UITableView _endCellAnimationsWithContext :] 中的断言失败

c++ - 如何在 C++ 中有效地将数值重新分配给字符数组

arrays - 如何创建实现共同特征的静态对象数组?

iphone - 我可以将一个对象插入到 NSDictionary 中吗?