删除对象时发送到不可变对象错误的变异方法

Mutating method sent to immutable object error when removing object

我想从数组中删除对象,但出现此错误。我找到了相关问题,但无法得到。 请帮我。 我的密码是

NSArray *tripsArray= [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSMutableArray *myTripsArray = [tripsArray mutableCopy];
for (NSDictionary *dict in myTripsArray){
    if ([[dict valueForKey:@"state"] isEqualToString:@"undeployed"]){
        int index = [myTripsArray indexOfObject:dict];
        [myTripsArray removeObjectAtIndex:index];
    }
}

这是因为您正在迭代的数组,您正在从同一个数组中删除一个对象。

更改此行:

for (NSDictionary *dict in myTripsArray)

为此:

for (NSDictionary *dict in [myTripsArray copy])

这里我是用数组的副本来迭代,用原数组来变异

尝试这样做:

NSArray *tripsArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

NSMutableArray *myTripsArray = [tripsArray mutableCopy];
for (NSDictionary *dict in [myTripsArray copy]){
    if ([[dict valueForKey:@"state"] isEqualToString:@"undeployed"]){
        int index = [myTripsArray indexOfObject:dict];
        [myTripsArray removeObjectAtIndex:index];
    }
}

// And now myTripsArray will be changed

你得到这个错误是因为你试图在枚举时间改变一个数组。您应该复制此数组并使用一个数组进行枚举,第二个数组用于删除。或者你可以在第二个数组中添加所有要删除的项目(你会在 cicle 中找到),然后通过调用 removeObject: 删除它们。

不存储索引,因为在第一次删除后第二个索引可能是错误的(如果第二个对象的索引高于第一个)。