Objective c 在旧数组中所做的更改也反映在新复制的数组中

Objective c 在旧数组中所做的更改也反映在新复制的数组中,objective-c,cocoa,Objective C,Cocoa,使用mutableCopy将一个数组的内容复制到另一个数组,但如果在原始数组中所做的更改也会显示在新数组中所做的更改。下面是我使用的代码 NSArray *newArr = [mainArray mutableCopy]; [[newArr objectAtIndex:indexpath.section] replaceObjectAtIndex:indexpath.row withObject:@""]; [[mainArray objectAtIndex:indexpath.section]

使用mutableCopy将一个数组的内容复制到另一个数组,但如果在原始数组中所做的更改也会显示在新数组中所做的更改。下面是我使用的代码

NSArray *newArr = [mainArray mutableCopy];
[[newArr objectAtIndex:indexpath.section] replaceObjectAtIndex:indexpath.row withObject:@""];
[[mainArray objectAtIndex:indexpath.section] removeObjectAtIndex:indexpath.row];
objAppDelegate.arrayProfile = [newArr objectAtIndex:2];

我必须删除原始数组mainArray中的值,但不想反映新数组中的更改。请引导。

您需要复制主阵列的所有项目

NSMutableArray *newArr = [[NSMutableArray alloc] initWithCapacity:mainArray.count];
for (NSObject* item in mainArray) {
    [newArr addObject:[item copy]];
}

对于NSArray,您必须使用copy而不是mutablecopy

 NSArray *newArr = [mainArray copy];

您希望发生什么?请尝试阅读,这将向您解释发生了什么。这仅在项的类实现NSCopying协议时有效。当然。如果他想复制元素,它们应该是可复制的。如果有人不知道复制数组不会复制数组中的对象,你不能指望他知道需要实现NSCopying。您应该提到它。正如我所看到的,他的对象是NSString的NSMutableArray…[[newArr objectAtIndex:indexath.section]replaceObjectAtIndex:indexath.row with object:@”“];ObjuleC不是SWIFT或C++。没有什么比NSString的NSMutableArray更好的了。只是一个对象数组。如果他使用的是
cell.titleLabel.text=[NSString stringWithFormat:@“%@”,item],他可以在数组中找到任何东西。