从nsarray中删除一个对象会删除所有对象

Nas*_*han 3 arrays objective-c nsmutablearray nsarray ios

我有一个不同的nsmutablearray的nsarray叫做:playerSkillsByLevelSnapshots.在下面的代码的开头,数组包含6个对象.

NSArray *anArray2 = [playerSkillsByLevelSnapshots objectAtIndex:index];
playerSkills = [NSMutableArray arrayWithArray:anArray2];
[playerSkillsByLevelSnapshots removeObject:anArray2];
Run Code Online (Sandbox Code Playgroud)

当我逐步浏览上面的最后一行时,该数组包含0个对象.任何人都可以向我解释为什么会这样.请注意,数组中没有重复的条目.

das*_*ght 8

发生这种情况的唯一原因是,如果playerSkillsByLevelSnapshots数组的所有对象都是相同的数组.这是一个常见的错误 - 当您在设置数组时将相同的数组对象添加到循环中的可变数组时会发生这种情况playerSkillsByLevelSnapshots,例如,如下所示:

NSMutableArray *playerSkillsByLevelSnapshots = [NSMutableArray array];
NSMutableArray *tmp = [NSMutableArray array];
for (int i = 0 ; i != 5 ; i++) {
    // add some objects, then...
    [playerSkillsByLevelSnapshots addObject:tmp];
    [tmp removeAllObjects]; // Prepare to the new cycle
}
Run Code Online (Sandbox Code Playgroud)

您可以通过复制放入的数组来解决此问题playerSkillsByLevelSnapshots.

该removeObject:方法的另一个问题是它从数组中删除所有与被移除的对象相等的对象,而不仅仅是第一个实例.如果您的playerSkillsByLevelSnapshots阵列可能存储彼此相同的对象,请切换到使用该removeObjectAtIndex:方法.