iOS-Bug: Collection <__NSArrayM: 0x> was mutated while being enumerated.

//init a NSArray

NSMutableArray*arr2= [NSMutableArrayarray];

for(inti=0; i<10; ++i) {

NSMutableDictionary*d = [NSMutableDictionarydictionaryWithObjectsAndKeys:[NSStringstringWithFormat:@"%d",i],@"a",nilnil];

[arr2addObject:d];

}

//Wrong

for(NSMutableDictionary*s in arr2) {

if([s[@"a"]isEqualToString:@"3"]) {

[arr2removeObject:s];//while here is safe for s[@"a"] = @"eeee";

}

}

//Safe 1.

[arr2enumerateObjectsUsingBlock:^(NSMutableDictionary*obj, NSUInteger idx,BOOLBOOL*stop) {

if([obj[@"a"]isEqualToString:@"3"]) {

*stop =YES;

[arr2removeObject:obj];// or obj[@"a"] = @"4ewewewe";

}

}];

//Safe 2.

NSArray*tmp = [NSArrayarrayWithArray:arr2];

for(NSMutableDictionary*s in tmp) {

if([s[@"a"]isEqualToString:@"3"]) {

s[@"a"] =@"eeee";

[arr2removeObject:s];

}

}

PS: 搜一句补充的话

//forin 循环中的便利内容不能被改变, 是因为如果改变其便利的内容会少一个, 而系统是不会允许这个发生的所以就会crash...但是当改变最后一个的内容时, 就不会crash, 是因为此时遍历已经结束, 结束之后对内容做修改是允许的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,206评论 1 6
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,042评论 0 9
  • 有个年轻美丽的女孩,出身豪门,家产丰厚,又多才多艺,日子过得很好。媒婆也快把她家的门槛给踩烂了,但她一直不想结婚...
    646baa785834阅读 532评论 0 0
  • 冬天 期盼大雪纷飞 这样 咱们走着走着 就到了白头
    静语诚阅读 436评论 0 2
  • 让我掉下眼泪的 不止甏肉干饭 让我依依不舍的 不止牛肉板面 夹饼还能吃多久 我停在小南门口 让我感到留恋的 是糁汤...
    lily小莉啊阅读 534评论 0 2

友情链接更多精彩内容