【Bug-iOS】Collection <__NSArrayM: 0x> was mutated while being enumerated.
2015-10-09 13:30
471 查看
NSMutableArray *mArr = [NSMutableArray
array];
for (int
i = 0; i <
10; i ++) {
NSMutableDictionary *mDic = [NSMutableDictionary dictionary];
[mDic setObject:[NSString stringWithFormat:@"%d", i] forKey:@"a"];
[mArr addObject:mDic];
}
//移除mArr中的某元素
//错误的:
for (NSMutableDictionary *dic
in mArr) {
if ([dic[@"a"]
isEqualToString:@"3"]) {
[mArr removeObject:dic];
}
}
//for-in循环的遍历内容不能被改变,是因为如果移除其遍历的内容便会少一个,而系统是不会允许这个发生的,所以就会crash...
但是当改变遍历的最后一个内容时,就不会crash,因为此时遍历已经结束,结束之后对内容进行修改是允许的。
//正确的:
//方法1.
[mArr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx,
BOOL *stop) {
if ([[obj objectForKey:@"a"] isEqualToString:@"3"])
{
*stop = YES;
[mArr removeObject:obj];
}
}];
//方法2.
NSArray *arr = [NSArray
arrayWithArray:mArr];
for (NSMutableDictionary *dic
in arr) {
if ([dic[@"a"]
isEqualToString:@"3"]) {
[mArr removeObject:dic];
}
}
array];
for (int
i = 0; i <
10; i ++) {
NSMutableDictionary *mDic = [NSMutableDictionary dictionary];
[mDic setObject:[NSString stringWithFormat:@"%d", i] forKey:@"a"];
[mArr addObject:mDic];
}
//移除mArr中的某元素
//错误的:
for (NSMutableDictionary *dic
in mArr) {
if ([dic[@"a"]
isEqualToString:@"3"]) {
[mArr removeObject:dic];
}
}
//for-in循环的遍历内容不能被改变,是因为如果移除其遍历的内容便会少一个,而系统是不会允许这个发生的,所以就会crash...
但是当改变遍历的最后一个内容时,就不会crash,因为此时遍历已经结束,结束之后对内容进行修改是允许的。
//正确的:
//方法1.
[mArr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx,
BOOL *stop) {
if ([[obj objectForKey:@"a"] isEqualToString:@"3"])
{
*stop = YES;
[mArr removeObject:obj];
}
}];
//方法2.
NSArray *arr = [NSArray
arrayWithArray:mArr];
for (NSMutableDictionary *dic
in arr) {
if ([dic[@"a"]
isEqualToString:@"3"]) {
[mArr removeObject:dic];
}
}
相关文章推荐
- iOS 多线程笔记_(2)
- iOS开发有关导航条坐标问题
- iOS--字符串拼接
- iOS --时间戳
- iOS开源项目大全
- iOS 定位服务
- iOS9AdaptationTips
- 项目适配iOS9遇到的一些问题及解决办法(更新两个小问题)
- iOS获取设备版本信息
- IOS中堆和栈的区别
- iOS开发MAC下配置svn
- iOS苹果官方Demo合集
- Xcode模拟器不能选择 强制打开提示iOS Simulator 意外退出
- iOS9.0修改状态栏颜色
- Xcode中添加.pch文件
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- 学习CGAffineTransform和CATransform3D
- IOS 捕获程序异常
- ios9:Search API
- iOS 9多任务分屏要点