错误代码:
NSMutableArray *memberarray=[[NSMutableArray alloc]initWithArray:MEMBERARRAY]; for (NSDictionary *dic in memberarray) { if ([[dic valueForKey:@"username"] isEqualToString:self.myusername.text]) { [memberarray removeObject:dic]; } }
当程序出现这个提示的时候,是因为你一边便利数组,又同时修改这个数组里面的内容,导致崩溃
1、解决方法:
NSMutableArray * arrayTemp = xxx; NSArray * array = [NSArray arrayWithArray: arrayTemp]; for (NSDictionary * dic in array) { if (condition){ [arrayTemp removeObject:dic]; } }
这种方法的原理就是再定义一个一模一样的数组,便利数组A,当有数据的时候,操作数组B进行删除操作。
2、当然,如果你的只是去除某一个,可以直接在 remove 之后加上 break 也可以,这样就停止了遍历,也可以解决安敢
3、另外一种参考方法
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); } }];
利用block来操作,根据查阅资料,发现block便利比for便利快20%左右,这个的原理是这样的:
找到符合的条件之后,暂停遍历,然后修改数组的内容
这种方法非常简单哟
参考文章
http://blog.csdn.net/piaodang1234/article/details/11902541
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/110.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
1 条评论
新手学习中。。。。