3

你好這個問題之前問:How do you deep copy a multidimensional NSMutableArray and its contents? 但答案不適合我。如何正確複製多維NSMutableArray?

我想:

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

和:

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

的複製作品,但是當我嘗試更換一個對象,我得到的錯誤:

- [__ NSArrayI replaceObjectAtIndex:withObject: ]:無法識別的選擇器發送到實例0x1073b1790

我做錯了什麼o r是不可能深入複製一個多維數組而不使其元素變成不可變的?

是否有解決方法?

感謝

回答

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]; 
} 

我是做二維數組。如果有更多維度,則可能必須爲每個維度添加一個額外的循環。

+0

如果是無限維數組,則可以用遞歸方法替換它。 – TheAmateurProgrammer

0

嘗試

NSMutableArray *mutableArray = [multiDimArray mutableCopy]; 

更換

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

與此我得到相同的錯誤信息。不知何故,只有數組的第一維是可變的,但所有其他維都是不可變的。 – Marty