删除对象时发送到不可变对象错误的变异方法
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:
删除它们。
不存储索引,因为在第一次删除后第二个索引可能是错误的(如果第二个对象的索引高于第一个)。
我想从数组中删除对象,但出现此错误。我找到了相关问题,但无法得到。 请帮我。 我的密码是
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:
删除它们。
不存储索引,因为在第一次删除后第二个索引可能是错误的(如果第二个对象的索引高于第一个)。