解决Collection <__NSArrayM: 0xb550c30> 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];

   }

}

这种方法就是在定义一个一模一样的数组,便利数组A然后操作数组B

今天终于找到了一个更快接的删除数组里面的内容以及修改数组里面的内容的方法:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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%左右,这个的原理是这样的:

找到符合的条件之后,暂停遍历,然后修改数组的内容

这种方法非常简单哟

时间: 2024-10-21 15:00:45

解决Collection <__NSArrayM: 0xb550c30> 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 *

Bug-iOS: Collection &lt;__NSArrayM: 0x&gt; 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:

【转】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];

mybatis文件映射之利用延迟加载解决collection分布查询(六)

Employee.java public class Employee { private Integer id; private String lastName; private String gender; private String email; Department dept; } Department.java public class Department { private Integer id; private String deptName; private List<Emp

开发过程中遇到的崩溃信息及原因,崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃

崩溃信息: 2016-04-05 13:58:35.913 loopdiner[6714:186743] *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7fbeacc01b90> was mutated while being enumerated.' 原因: 遍历数组的时候对数组内容进行了修改,导致崩溃. 解决办法: 将需要遍

关于数组在遍历过程中修改问题

问题描述:当我们需要通过遍历数组过滤的时候,一般会考虑以下写法,这种写法 会引起crash *** Collection <__NSArrayM: 0x7fddedfca720> was mutated while being enumerated. 1 NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithObjects:@"1",@"1",@"2",@&quo

iOS开发中常见的一些异常

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