需求是遍历一个存 model 的数组 如果 id相同就删除
我写的是
for (UserModel*model in self.userArray) {
if (model.uId == deleteId) {
[self.userArray removeObject:model];
}
}
然后崩溃了。。。原因是Terminating app due to uncaught exception ‘NSGenericException’, reason: ‘*** Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.’在枚举的时候发生了变化
然后在网上查到 是因为修改了遍历对象 所以导致崩溃
然后我就想到办法
BOOL isContain = NO;
for (UserModel *model in self.userArray) {
if (model.uId == deleteId) {
isContain = YES;
}
}
if (isContain) {
[self.userArray removeObject:model];
}
然后在网上找到其他办法
一、
定义一个临时数组 = self.userArray
然后遍历临时数组,但是操作self.userArray;
二、
利用block
NSMutableArray *tempArray = [[NSMutableArray alloc]initWithObjects:@"12",@"23",@"34",@"45",@"56", nil];
[tempArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isEqualToString:@"34"]) {
*stop = YES;
if (*stop == YES) {
[tempArray replaceObjectAtIndex:idx withObject:@"3333333"];
}
}
if (*stop) {
NSLog(@"array is %@",tempArray);
}
}];
此方法的好处是 这个便利方法 比for 遍历更快, 因为此方法找到符合的条件后就会停止遍历 然后修改数组。