NSMutableArray:使用数组初始化时数据丢失

NSMutableArray: data missing when init with an Array

如截图所示,有大神知道是什么问题吗?感谢您的热心帮助!

您正在从正在迭代的数组中删除对象。 这是一种不好的做法,会导致这样的错误。

您只需更换

for (NSString *code in list)

与 :

for (NSString *code in codeList)

在迭代时不要从数组或字典或任何集合集中删除对象。 保留迭代时要删除的索引,然后删除所有对象。您可以使用 indexesOfObjectsPassingTest 方法:

NSMutableArray * list = [NSMutableArray arrayWithArray:codeList];

NSIndexSet * indexesToRemove = [list indexesOfObjectsPassingTest:^BOOL(NSString *code, NSUInteger idx, BOOL *stop) {
    return [self.codeMapping.allKeys containsObject:code];
}];

[list removeObjectsAtIndexes:indexesToRemove];

您应该使用 indexesOfObjectsPassingTest 和 objectsAtIndexes 来执行此操作:即使您遵循例如 Anbu 的回复来使您的代码正常工作,此代码的运行时间也是 O (n^2)。使用包含 100,000 个对象的列表来执行此操作,其中每隔一个对象就会被删除,并且您的应用程序会悲惨地死去,因为它用完了 CPU 时间。

您只需输入 codeList 即可解决您的问题。 检查这个我修改了你的方法。

-(NSArray *) checkVisibleCode:(NSArray *) codeList{
    NSMutableArray *list = [NSMutableArray arrayWithArray:codeList];
    for (NSString *code in codeList) {
        if (![self.codeMapping.allKeys containsObject:code]) {
            [list removeObject:code];
        }
    }
    return list;
}