删除对象时,Mutating方法发送到不可变对象错误

时间:2016-06-30 14:01:42

标签: ios objective-c arrays nsmutablearray

我想从数组中删除对象但是我收到此错误。我发现了相关的问题但却无法得到。 请帮我。 我的代码是

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];
    }
}

3 个答案:

答案 0 :(得分:2)

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

更改此行:

for (NSDictionary *dict in myTripsArray)

对此:

for (NSDictionary *dict in [myTripsArray copy])

在这里,我使用数组的副本进行迭代,并使用原始数据进行变异。

答案 1 :(得分:1)

尝试这样做:

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

答案 2 :(得分:1)

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

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