需求是遍歷一個存 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 遍歷更快, 因為此方法找到符合的條件后就會停止遍歷 然后修改數組。