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

        //init a NSArray
        NSMutableArray *arr2 = [NSMutableArray array];
        for (int i=0; i<10; ++i) {
            NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%d", i], @"a", nil];
            [arr2 addObject:d];
        }

        //Wrong
        for (NSMutableDictionary *s in arr2) {
            if ([s[@"a"] isEqualToString:@"3"]) {
                [arr2 removeObject:s]; //while here is safe for s[@"a"] = @"eeee";
            }
        }

        //Safe 1.
        [arr2 enumerateObjectsUsingBlock:^(NSMutableDictionary *obj, NSUInteger idx, BOOL *stop) {
            if ([obj[@"a"] isEqualToString:@"3"]) {
                *stop = YES;
                [arr2 removeObject:obj]; // or obj[@"a"] = @"4ewewewe";
            }
        }];

        //Safe 2.
        NSArray *tmp = [NSArray arrayWithArray:arr2];
        for (NSMutableDictionary *s in tmp) {
            if ([s[@"a"] isEqualToString:@"3"]) {
                s[@"a"] = @"eeee";
                [arr2 removeObject:s];
            }
        }

PS: 搜一句补充的话

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

时间: 2024-08-01 23:09:18

Bug-iOS: Collection <__NSArrayM: 0x> was mutated while being enumerated.的相关文章

【学习ios之路:Object-C错误】Collection &lt;__NSArrayM: 0xb550c30&gt; was mutated while being enumerated.

错误提示: 产生错误的原因: 当程序在执行遍历时,同时又修改数组中的内容,导致崩溃. 解决方法如下: 方法1:定义一个一模一样的数组,遍历新数组的同时,对原数组进行操作修改. 例如: NSMutableArray *arrayTemp = [@[@"aa",@"vv",@"bb"] mutableCopy]; NSArray *array = [NSArray arrayWithArray: arrayTemp]; for (NSString *

解决Collection &lt;__NSArrayM: 0xb550c30&gt; was mutated while being enumerated

当程序出现这个提示的时候,是因为你一边便利数组,又同时修改这个数组里面的内容,导致崩溃,网上的方法如下: 1 2 3 4 5 6 7 8 9 NSMutableArray * arrayTemp = xxx; NSArray * array = [NSArray arrayWithArray: arrayTemp]; for (NSDictionary * dic in array) {    if (condition){       [arrayTemp removeObject:dic];

【转】was mutated while being enumerated 你是不是以为你真的懂For...in... ??

原文网址:http://www.jianshu.com/p/ad80d9443a92 支持原创,如需转载, 请注明出处你是不是以为你真的懂For...in... ??哈哈哈哈, 我也碰到了这个报错 .究其原因, 顾名思义 "在枚举的时候发生了变化"for...in...利用了快速枚举NSFastEnumerate当我们想要改变数组变量中的数据或者删除数组中的数据的时候,不能用for...in... 应该是Objective-C中的foreach循环与Java中的相似,在内部是用iter

异常Crash之 NSGenericException,NSArray was mutated while being enumerated

*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x17542520> was mutated while being enumerated.' 从字面上不难理解,Crash的原因在于我们一边遍历数组,一边修改该数组数据.例如:      NSMutableArray *OriginalArray = [NSMutableArray

奔溃日志:was mutated while being enumerated

这两天发现app的一个崩溃,提示是 *** Collection <CALayerArray: 0x18904630> was mutated while being enumerated. 找了一天终于找到了罪魁祸首,代码是这样的 for (NSInteger i = 0; i < postArr.count; i++) { for (NSInteger j = i+1; j < postArr.count; j++) { MoviePhoto *mp = postArr[i];

iOS.Crash.[__NSArrayM objectForKeyedSubscript:]

1. [__NSArrayM objectForKeyedSubscript:]: unrecognized selector sent to instance - source code and screenshot attached http://stackoverflow.com/questions/21268539/nsarraym-objectforkeyedsubscript-unrecognized-selector-sent-to-instance 2. 关于objectfork

vue iframe嵌套页面高度自适应 (ios 宽度扩大的bug , ios展示比例问题)

<template> <div class="card-index pt-relative"> <div id="wrapper" :style="'height:'+Height+'px;'"> <iframe v-if="iframeType" :src="srcUrl" sandbox="allow-forms allow-same-origin a

iOS collection长按编辑功能

//长按是否出现编辑菜单(Cut Copy Paste) - (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath { return YES; } - (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action fo

iOS开发中常见的一些异常

iOS开发中常见的异常包括以下几种NSInvalidArgumentExceptionNSRangeExceptionNSGenericExceptionNSInternallnconsistencyExceptionNSFileHandleOperationException NSInvalidArgumentException非法参数异常是objective-C代码最常出现的错误,所以平时写代码的时候,需要多加注意,加强对参数的检查,避免传入非法参数导致异常,其中尤以nil参数为甚. 1.集