如何正确深度复制多维NSMutableArray?

时间:2012-09-23 11:45:45

标签: objective-c multidimensional-array nsmutablearray deep-copy

你好问过这个问题:How do you deep copy a multidimensional NSMutableArray and its contents? 但答案对我不起作用。

我试过了:

NSMutableArray *copy = [[NSMutableArray alloc] initWithArray:multiDimArray copyItems:YES];

NSMutableArray *mutableArray = [multiDimArray mutableCopy];
NSMutableArray *copy = [[NSMutableArray alloc] initWithArray:mutableArray copyItems:YES];

复制有效但当我尝试替换对象时出现错误:

- [__ NSArrayI replaceObjectAtIndex:withObject:]:无法识别的选择器发送到实例0x1073b1790

我做错了什么或是不可能深度复制多维数组而不使其元素变得不可变?

有解决方法吗?

由于

2 个答案:

答案 0 :(得分:0)

尝试

NSMutableArray *mutableArray = [multiDimArray mutableCopy];

替换为

NSMutableArray *mutableArray = [[NSMutableArray arrayWithArray:multiDimArray] mutableCopy];

答案 1 :(得分:0)

我得到了它的工作:

NSMutableArray *originalArray = [NSMutableArray new];

NSMutableArray *copyArray = [NSMutableArray new];
for(NSArray *subarray in originalArray) {
    NSMutableArray *subCopy = [NSMutableArray new];
    for (id item in subarray){
        [subCopy addObject:[item copy]];
    }
    [copyArray addObject: subCopy];
}

我是为二维数组做的。如果有更多维度,您可能需要为每个维度添加额外的for循环。